Introduction to TensorFlow, Deep Learning and Transfer Learning (work in progress)¶
- Project: Dog Vision 🐶👁 - Using computer vision to classify dog photos into different breeds.
- Goals: Learn TensorFlow, deep learning and transfer learning.
- Domain: Computer vision.
- Data: Images of dogs from Stanford Dogs Dataset (120 dog breeds, 20,000+ images).
- Problem type: Multi-class classification (120 different classes).
Welcome, welcome!
The focus of this notebook is to give a quick overview of deep learning with TensorFlow.
How?
We're going to go through the machine learning workflow steps and build a computer vision project to classify photos of dogs into their respective dog breed.
TK - image of workflow - e.g. dog photo -> model -> dog breed
# Quick timestamp
import datetime
print(f"Last updated: {datetime.datetime.now()}")
Last updated: 2023-11-09 01:52:47.025946
TK - What we're going to cover¶
In this project, we're going to be introduced to the power of deep learning and more specifically, transfer learning using TensorFlow.
We'll go through each of these in the context of the 6 step machine learning framework:
- Problem defintion - Use computer vision to classify photos of dogs into different dog breeds.
- Data - 20,000+ images of dogs from 120 different dog breeds from the Stanford Dogs dataset.
- Evaluation - We'd like to beat the original paper's results (22% mean accuracy across all classes, tip: A good way to practice your skills is to find some results online and try to beat them).
- Features - Because we're using deep learning, our model will learn the features on its own.
- Modelling - We're going to use a pretrained convolutional neural network (CNN) and transfer learning.
- Experiments - We'll try different amounts of data with the same model to see the effects on our results.
Note: It's okay not to know these exact steps ahead of time. When starting a new project, it's often the case you'll figure it out as you go. These steps are only filled out because I've had practice working on several machine learning projects. You'll pick up these ideas overtime.
TK - Table of contents¶
- Problem type (e.g. multi-class classification)
- Domain (e.g. computer vision)
- Data type (e.g. unstructured vs structured)
Problem Defintion¶
Data¶
Evaluation¶
Features¶
Modelling¶
Experiments¶
TK - Where can can you get help?¶
All of the materials for this course live on GitHub.
If you run into trouble, you can ask a question on the course GitHub Discussions page there too.
Quick definitions¶
Let's start by breaking down some of the most important topics we're going to go through.
TK - What is TensorFlow?¶
TensorFlow is an open source machine learning and deep learning framework originally developed by Google.
TK - Why use TensorFlow?¶
TensorFlow allows you to manipulate data and write deep learning algorithms using Python code.
It also has several built-in capabilities to leverage accelerated computing hardware (e.g. GPUs, Graphics Processing Units and TPUs, Tensor Processing Units).
Many of world's largest companies power their machine learning workloads with TensorFlow.
TK - What is deep learning?¶
Deep learning is a form of machine learning where data passes through a series of progressive layers which all contribute to learning an overall representation of that data.
The series of progressive layers combines to form what's referred to as a neural network.
For example, a photo may be turned into numbers and those numbers are then manipulated mathematically through each progressive layer to learn patterns in the photo.
The "deep" in deep learning comes from the number of layers used in the neural network.
So when someone says deep learning or (artificial neural networks), they're typically referring to same thing.
TK - What can deep learning be used for?¶
Deep learning is such a powerful technique that new use cases are being discovered everyday.
Most of the modern forms of artifical intelligence (AI) applications you see, are powered by deep learning.
ChatGPT uses deep learning to process text and return a response.
Tesla's self-driving cars use deep learning to power their computer vision systems.
Apple's Photos app uses deep learning to recognize faces in images and create Photo Memories.
Nutrify (an app my brother and I build) uses deep learning to recognize food in images.
TK - image of examples
TK - What is transfer learning?¶
Transfer learning is one of the most powerful and useful techniques in modern AI and machine learning.
It involves taking what one model (or neural network) has learned in a similar domain and applying to your own.
In our case, we're going to use transfer learning to take the patterns a neural network has learned from the 1 million+ images and over 1000 classes in ImageNet (a gold standard computer vision benchmark) and apply them to our own problem of recognizing dog breeds.
The biggest benefit of transfer learning is that it often allows you to get outstanding results with less data and time.
TK - Transfer learning workflow - Large data -> Large model -> Patterns -> Custom data -> Custom model
TK - Getting setup¶
This section of the course is taught with Google Colab, an online Jupyter Notebook that provides free access to GPUs (Graphics Processing Units, we'll hear more on these later).
For a quick rundown on how to use Google Colab, see their introductory guide (it's quite similar to a Jupyter Notebook with a few different options).
Google Colab also comes with many data science and machine learning libraries, including TensorFlow, pre-installed.
Getting a GPU¶
Before running any code, we'll make sure our Google Colab instance is connected to a GPU.
You can do this via going to Runtime -> Change runtime type -> GPU (this may restart your existing runtime).
Why use a GPU?
Since neural networks perform a large amount of calculations behind the scenes (the main one being matrix multiplication), you need a computer chip that perform these calculations quickly, otherwise you'll be waiting all day for a model to train.
And in short, GPUs are much faster at performing matrix multiplications than CPUs.
Why this is the case is behind the scope of this project (you can search "why are GPUs faster than CPUs for machine learning?" for more).
The main thing to remember is: generally, in deep learning, GPUs = faster than CPUs.
Note: A good experiment would be to run the neural networks we're going to build later on with and without a GPU and see the difference in their training times.
Ok, enough talking, let's start by importing TensorFlow!
We'll do so using the common abbreviation tf.
# TK - TODO: Check compatibility with Keras 3.0 by installing tf-nightly, see: https://x.com/fchollet/status/1719448117064659352?s=20
import tensorflow as tf
tf.__version__
'2.14.0'
Nice!
Note: If you want to run TensorFlow locally, you can follow the TensorFlow installation guide.
Now let's check to see if TensorFlow has access to a GPU (this isn't 100% required to complete this project but will speed things up dramatically).
We can do so with the method tf.config.list_physical_devices().
# Do we have access to a GPU?
device_list = tf.config.list_physical_devices()
if "GPU" in [device.device_type for device in device_list]:
print(f"[INFO] TensorFlow has GPU available to use. Woohoo!! Computing will be sped up!")
print(f"[INFO] Accessible devices:\n{device_list}")
else:
print(f"[INFO] TensorFlow does not have GPU available to use. Models may take a while to train.")
print(f"[INFO] Accessible devices:\n{device_list}")
[INFO] TensorFlow has GPU available to use. Woohoo!! Computing will be sped up! [INFO] Accessible devices: [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
TK - Getting Data¶
There are several options and locations to get data for a deep learning project.
| Resource | Description |
|---|---|
| Kaggle Datasets | A collection of datasets across a wide range of topics. |
| TensorFlow Datasets | A collection of ready-to-use machine learning datasets ready for use under the tf.data.Datasets API. You can see a list of all available datasets in the TensorFlow documentation. |
| Hugging Face Datasets | A continually growing resource of datasets broken into several different kinds of topics. |
| Google Dataset Search | A search engine by Google specifically focused on searching online datasets. |
| Original sources | Datasets which are made available by researchers or companies with the release of a product or research paper (sources for these will vary, they could be a link on a website or a link to an application form). |
| Custom datasets | These are datasets comprised of your own custom source of data. You may build these from scratch on your own or have access to them from an existing product or service. For example, your entire photos library could be your own custom dataset or your entire notes and documents folder or your company's custom order history. |
In our case, the dataset we're going to use is called the Stanford Dogs dataset (or ImageNet dogs, as the images are dogs separated from ImageNet).
Because the Stanford Dogs dataset has been around for a while (since 2011, which as of writing this in 2023 is like a lifetime in deep learning), it's available from several resources:
- The original project website via link download
- Inside TensorFlow datasets under
stanford_dogs - On Kaggle as a downloadable dataset
The point here is that when you're starting out with practicing deep learning projects, there's no shortage of datasets available.
However, when you start wanting to work on your own projects or within a company environment, you'll likely start to work on custom datasets (datasets you build yourself or aren't available publicly online).
The main difference between existing datasets and custom datasets is that existing datasets often come preformatted and ready to use.
Where as custom datasets often require some preprocessing before they're ready to use within a machine learning project.
To practice formatting a dataset for a machine learning problem, we're going to download the Stanford Dogs dataset from the original website.
Before we do so, the following code is an example of how we'd get the Stanford Dogs dataset from TensorFlow Datasets.
# Download the dataset into train and test split using TensorFlow Datasets
# import tensorflow_datasets as tfds
# ds_train, ds_test = tfds.load('stanford_dogs', split=['train', 'test'])
TK - Download data directly from Stanford Dogs website¶
Our overall project goal is to build a computer vision model which performs better than the original Stanford Dogs paper (average of 22% accuracy per class across 120 classes).
To do so, we need some data.
Let's download the original Stanford Dogs dataset from the project website.
The data comes in three main files:
- Images (757MB) -
images.tar - Annotations (21MB) -
annotation.tar - Lists, with train/test splits (0.5MB) -
lists.tar
Our goal is to get a file structure like this:
dog_vision_data/
images.tar
annotation.tar
lists.tar
Note: If you're using Google Colab for this project, remember that any data uploaded to the Google Colab session gets deleted if the session disconnects. So to save us redownloading the data every time, we're going to download it once and save it to Google Drive.
Resource: For a good guide on getting data in and out of Google Colab, see the Google Colab
io.ipynbtutorial.
To make sure we don't have to keep redownloading the data every time we leave and come back to Google Colab, we're going to:
- Download the data if it doesn't already exist on Google Drive.
- Copy it to Google Drive (because Google Colab connects nicely with Google Drive) if it isn't already there.
- If the data already exists on Google Drive (we've been through steps 1 & 2), we'll import it instead.
There are two main options to connect Google Colab instances to Google Drive:
- Click "Mount Drive" in "Files" menu on the left.
- Mount programmatically with
from google.colab import drive->drive.mount('/content/drive').
More specifically, we're going to follow the following steps:
- Mount Google Drive.
- Setup constants such as our base directory to save files to, the target files we'd like to download and target URL we'd like to download from.
- Setup our target local path to save to.
- Check if the target files all exist in Google Drive and if they do, copy them locally.
- If the target files don't exist in Google Drive, download them from the target URL with the
!wgetcommand. - Create a file on Google Drive to store the download files.
- Copy the downloaded files to Google Drive for use later if needed.
A fair few steps, but nothing we can't handle!
Plus, this is all good practice for dealing with and manipulating data, a very important skill in the machine learning engineers toolbox.
from pathlib import Path
from google.colab import drive
# 1. Mount Google Drive (this will bring up a pop-up to sign-in/authenticate)
# Note: This step is specifically for Google Colab, if you're working locally, you may need a different setup
drive.mount("/content/drive")
# 2. Setup constants
# Note: For constants like this, you'll often see them created as variables with all capitals
TARGET_DRIVE_PATH = Path("drive/MyDrive/tensorflow/dog_vision_data")
TARGET_FILES = ["images.tar", "annotation.tar", "lists.tar"]
TARGET_URL = "http://vision.stanford.edu/aditya86/ImageNetDogs"
# 3. Setup local path
local_dir = Path("dog_vision_data")
# 4. Check if the target files exist in Google Drive, if so, copy them to Google Colab
if all((TARGET_DRIVE_PATH / file).is_file() for file in TARGET_FILES):
print(f"[INFO] Copying Dog Vision files from Google Drive to local directory...")
print(f"[INFO] Source dir: {TARGET_DRIVE_PATH} -> Target dir: {local_dir}")
!cp -r {TARGET_DRIVE_PATH} .
print("[INFO] Good to go!")
else:
# 5. If the files don't exist in Google Drive, download them
print(f"[INFO] Target files not found in Google Drive.")
print(f"[INFO] Downloading the target files... this shouldn't take too long...")
for file in TARGET_FILES:
# wget is short for "world wide web get", as in "get a file from the web"
# -nc or --no-clobber = don't download files that already exist locally
# -P = save the target file to a specified prefix, in our case, local_dir
!wget -nc {TARGET_URL}/{file} -P {local_dir} # the "!" means to execute the command on the command line rather than in Python
print(f"[INFO] Saving the target files to Google Drive, so they can be loaded later...")
# 6. Ensure target directory in Google Drive exists
TARGET_DRIVE_PATH.mkdir(parents=True, exist_ok=True)
# 7. Copy downloaded files to Google Drive (so we can use them later and not have to re-download them)
!cp -r {local_dir}/* {TARGET_DRIVE_PATH}/
Mounted at /content/drive [INFO] Copying Dog Vision files from Google Drive to local directory... [INFO] Source dir: drive/MyDrive/tensorflow/dog_vision_data -> Target dir: dog_vision_data [INFO] Good to go!
Data downloaded!
Nice work!
Now if we get the contents of local_dir (dog_vision_data), what do we get?
We can first make sure it exists with Path.exists() and then we can iterate through its contents with Path.iterdir() and print out the .name attribute of each file.
if local_dir.exists():
print(str(local_dir) + "/")
for item in local_dir.iterdir():
print(" ", item.name)
dog_vision_data/ annotation.tar images.tar lists.tar
Excellent! That's exactly the format we wanted.
Now you might've noticed that each file ends in .tar.
What's this?
Searching "what is .tar?", I found:
In computing, tar is a computer software utility for collecting many files into one archive file, often referred to as a tarball, for distribution or backup purposes.
Source: Wikipedia tar page).
Exploring a bit more, I found that the .tar format is similar to .zip, however, .zip offers compression, where as .tar mostly combines many files into one.
So how do we "untar" the files in images.tar, annotation.tar and lists.tar?
We can use the !tar command (or just tar from outside of a Jupyter Cell)!
Doing this will expand all of the files within each of the .tar archives.
We'll also use a couple of flags to help us out:
- The
-xflag tellstarto extract files from an archive. - The
-fflag specifies that the following argument is the name of the archive file. - You can combine flags by putting them together
-xf.
Let's try it out!
# Untar images
# -x = extract files from the zipped file
# -v = verbose
# -z = decompress files
# -f = tell tar which file to deal with
!tar -xf dog_vision_data/images.tar
!tar -xf dog_vision_data/annotation.tar
!tar -xf dog_vision_data/lists.tar
What new files did we get?
We can check in Google Colab by inspecting the "Files" tab on the left.
Or with Python by using os.listdir(".") where "." means "the current directory".
import os
os.listdir(".") # "." stands for "here" or "current directory"
['.config', 'test_list.mat', 'dog_vision_data', 'Annotation', 'train_list.mat', 'drive', 'Images', 'file_list.mat', 'sample_data']
Ooooh!
Looks like we've got some new files!
Specifically:
train_list.mat- a list of all the training set images.test_list.mat- a list of all the testing set images.Images/- a folder containing all of the images of dogs.Annotation/- a folder containing all of the annotations for each image.file_list.mat- a list of all the files (training and test list combined).
Our next step is to go through them and see what we've got.
Exploring the data¶
Once you've got a dataset, before building a model, it's wise to explore it for a bit to see what kind of data you're working with.
- TK - things you should do when you start with a new dataset
- visualize
- check the distributions (e.g. number of samples per class)
TK - daniel bourke tweet about abraham loss function - https://twitter.com/mrdbourke/status/1456087631641473033
Discussing our target data format¶
Since our goal is to build a computer vision model to classify dog breeds, we need a way to tell our model what breed of dog is in what image.
A common data format for a classification problem is to have samples stored in folders named after their class name.
For example:
images_split/
├── train/
│ ├── class_1/
│ │ ├── train_image1.jpg
│ │ ├── train_image2.jpg
│ │ └── ...
│ ├── class_2/
│ │ ├── train_image1.jpg
│ │ ├── train_image2.jpg
│ │ └── ...
└── test/
├── class_1/
│ ├── test_image1.jpg
│ ├── test_image2.jpg
│ └── ...
├── class_2/
│ ├── test_image1.jpg
│ ├── test_image2.jpg
...
In the case of dog images, we'd put all of the images labelled "chihuahua" in a folder called chihuahua/ (and so on for all the other classes and images).
We could split these folders so that training images go in train/chihuahua/ and testing images go in test/chihuahua/.
This is what we'll be working towards creating.
Note: This structure of folder format doesn't just work for only images, it works for text, audio and other kind of classification data too.
Exploring the file lists¶
How about we check out the train_list.mat, test_list.mat and full_list.mat files?
Searching online, for "what is a .mat file?", I found that it's a MATLAB file. Before Python became the default language for machine learning and deep learning, many models and datasets were built in MATLAB.
Then I searched, "how to open a .mat file with Python?" and found an answer on Stack Overflow saying I could use the scipy library (a scientific computing library).
The good news is, Google Colab comes with scipy preinstalled.
We can use the scipy.io.loadmat() method to open a .mat file.
import scipy
# Open lists of train and test .mat
train_list = scipy.io.loadmat("train_list.mat")
test_list = scipy.io.loadmat("test_list.mat")
file_list = scipy.io.loadmat("file_list.mat")
# Let's inspect the output and type of the train_list
train_list, type(train_list)
({'__header__': b'MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Sun Oct 9 08:36:13 2011',
'__version__': '1.0',
'__globals__': [],
'file_list': array([[array(['n02085620-Chihuahua/n02085620_5927.jpg'], dtype='<U38')],
[array(['n02085620-Chihuahua/n02085620_4441.jpg'], dtype='<U38')],
[array(['n02085620-Chihuahua/n02085620_1502.jpg'], dtype='<U38')],
...,
[array(['n02116738-African_hunting_dog/n02116738_6754.jpg'], dtype='<U48')],
[array(['n02116738-African_hunting_dog/n02116738_9333.jpg'], dtype='<U48')],
[array(['n02116738-African_hunting_dog/n02116738_2503.jpg'], dtype='<U48')]],
dtype=object),
'annotation_list': array([[array(['n02085620-Chihuahua/n02085620_5927'], dtype='<U34')],
[array(['n02085620-Chihuahua/n02085620_4441'], dtype='<U34')],
[array(['n02085620-Chihuahua/n02085620_1502'], dtype='<U34')],
...,
[array(['n02116738-African_hunting_dog/n02116738_6754'], dtype='<U44')],
[array(['n02116738-African_hunting_dog/n02116738_9333'], dtype='<U44')],
[array(['n02116738-African_hunting_dog/n02116738_2503'], dtype='<U44')]],
dtype=object),
'labels': array([[ 1],
[ 1],
[ 1],
...,
[120],
[120],
[120]], dtype=uint8)},
dict)
Okay, looks like we get a dictionary with several fields we may be interested in.
Let's check out the keys of the dictionary.
train_list.keys()
dict_keys(['__header__', '__version__', '__globals__', 'file_list', 'annotation_list', 'labels'])
My guess is that the file_list key is what we're after, as this looks like a large array of image names (the files all end in .jpg).
How about we see how many files are in each file_list key?
# Check the length of the file_list key
print(f"Number of files in training list: {len(train_list['file_list'])}")
print(f"Number of files in testing list: {len(test_list['file_list'])}")
print(f"Number of files in full list: {len(file_list['file_list'])}")
Number of files in training list: 12000 Number of files in testing list: 8580 Number of files in full list: 20580
Beautiful! Looks like these lists contain our training and test splits and the full list has a list of all the files in the dataset.
Let's inspect the train_list['file_list'] further.
train_list['file_list']
array([[array(['n02085620-Chihuahua/n02085620_5927.jpg'], dtype='<U38')],
[array(['n02085620-Chihuahua/n02085620_4441.jpg'], dtype='<U38')],
[array(['n02085620-Chihuahua/n02085620_1502.jpg'], dtype='<U38')],
...,
[array(['n02116738-African_hunting_dog/n02116738_6754.jpg'], dtype='<U48')],
[array(['n02116738-African_hunting_dog/n02116738_9333.jpg'], dtype='<U48')],
[array(['n02116738-African_hunting_dog/n02116738_2503.jpg'], dtype='<U48')]],
dtype=object)
Looks like we've got an array of arrays.
How about we turn them into a Python list for easier handling?
We can do so by extracting each individual item via indexing and list comprehension.
Let's see what it's like to get a single file name.
# Get a single filename
train_list['file_list'][0][0][0]
'n02085620-Chihuahua/n02085620_5927.jpg'
Now let's get a Python list of all the individual file names (e.g. n02097130-giant_schnauzer/n02097130_2866.jpg) so we can use them later.
# Get a Python list of all file names for each list
train_file_list = list([item[0][0] for item in train_list["file_list"]])
test_file_list = list([item[0][0] for item in test_list["file_list"]])
full_file_list = list([item[0][0] for item in file_list["file_list"]])
len(train_file_list), len(test_file_list), len(full_file_list)
(12000, 8580, 20580)
Wonderful!
How about we view a random sample of the filenames we extracted?
Note: One of my favourite things to do whilst exploring data is to continually view random samples of it. Whether it be file names or images or text snippets. Why? You can always view the first X number of samples, however, I find that continually viewing random samples of the data gives you a better of overview of the different kinds of data you're working with. It also gives you the small chance of stumbling upon a potential error.
We can view random samples of the data using Python's random.sample() method.
import random
random.sample(train_file_list, k=10)
['n02113712-miniature_poodle/n02113712_578.jpg', 'n02109047-Great_Dane/n02109047_6008.jpg', 'n02106030-collie/n02106030_10246.jpg', 'n02098413-Lhasa/n02098413_2308.jpg', 'n02085620-Chihuahua/n02085620_9414.jpg', 'n02109047-Great_Dane/n02109047_2475.jpg', 'n02102318-cocker_spaniel/n02102318_8482.jpg', 'n02091244-Ibizan_hound/n02091244_2050.jpg', 'n02093754-Border_terrier/n02093754_1845.jpg', 'n02106382-Bouvier_des_Flandres/n02106382_501.jpg']
Now let's do a quick check to make sure none of the training image file names appear in the testing image file names list.
This is important because the number 1 rule in machine learning is: always keep the test set separate from the training set.
We can check that there are no overlaps by turning train_file_list into a Python set() and using the intersection() method.
# How many files in the training set intersect with the testing set?
len(set(train_file_list).intersection(test_file_list))
0
Excellent! Looks like there are no overlaps.
We could even put an assert check to raise an error if there are any overlaps (e.g. the length of the intersection is greater than 0).
assert works in the fashion: assert expression, message_if_expression_fails.
If the assert check doesn't output anything, we're good to go!
# Make an assertion statement to check there are no overlaps (try changing test_file_list to train_file_list to see how it works)
assert len(set(train_file_list).intersection(test_file_list)) == 0, "There are overlaps between the training and test set files, please check them."
Woohoo!
Looks like there's no overlaps, let's keep exploring the data.
Exploring the Annotation folder¶
How about we look at the Annotation folder next?
We can click the folder on the file explorer on the left to see what's inside.
But we can also explore the contents of the folder with Python.
Let's use os.listdir() to see what's inside.
os.listdir("Annotation")[:10]
['n02086240-Shih-Tzu', 'n02113978-Mexican_hairless', 'n02086646-Blenheim_spaniel', 'n02108089-boxer', 'n02107908-Appenzeller', 'n02105251-briard', 'n02097474-Tibetan_terrier', 'n02097209-standard_schnauzer', 'n02089973-English_foxhound', 'n02109525-Saint_Bernard']
Looks like there are files each with a dog breed name with several numbered files inside.
Each of the files contains a HTML version of an annotation relating to an image.
For example, Annotation/n02085620-Chihuahua/n02085620_10074:
<annotation>
<folder>02085620</folder>
<filename>n02085620_10074</filename>
<source>
<database>ImageNet database</database>
</source>
<size>
<width>333</width>
<height>500</height>
<depth>3</depth>
</size>
<segment>0</segment>
<object>
<name>Chihuahua</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>25</xmin>
<ymin>10</ymin>
<xmax>276</xmax>
<ymax>498</ymax>
</bndbox>
</object>
</annotation>
The fields include the name of the image, the size of the image, the label of the object and where it is (bounding box coordinates).
If we were performing object detection (finding the location of a thing in an image), we'd pay attention to the <bndbox> coordinates.
However, since we're focused on classification, our main consideration is the mapping of image name to class name.
Since we're dealing with 120 classes of dog breed, let's write a function to check the number of subfolders in the Annotation directory (there should be 120 subfolders, one for each breed of dog).
To do so, we can use Python's pathlib.Path class, along with Path.iterdir() to loop over the contents of Annotation and Path.is_dir() to check if the target item is a directory.
from pathlib import Path
def count_subfolders(directory_path: str) -> int:
"""
Count the number of subfolders in a given directory.
Args:
directory_path (str): The path to the directory in which to count subfolders.
Returns:
int: The number of subfolders in the specified directory.
Examples:
>>> count_subfolders('/path/to/directory')
3 # if there are 3 subfolders in the specified directory
"""
return len([name for name in Path(directory_path).iterdir() if name.is_dir()])
directory_path = "Annotation"
folder_count = count_subfolders(directory_path)
print(f"Number of subfolders in {directory_path} directory: {folder_count}")
Number of subfolders in Annotation directory: 120
Perfect!
There are 120 subfolders of annotations, one for each class of dog we'd like to identify.
But on further inspection of our file lists, it looks like the class name is already in the filepath.
# View a single training file pathname
train_file_list[0]
'n02085620-Chihuahua/n02085620_5927.jpg'
With this information we know, that image n02085620_5927.jpg should contain a Chihuahua.
Let's check.
I searched "how to display an image in Google Colab" and found another answer on Stack Overflow.
Turns out you can use IPython.display.Image(), as Google Colab comes with IPython (Interactive Python) built-in.
from IPython.display import Image
Image(Path("Images", train_file_list[0]))
Woah!
We get an image of a dog!
Exploring the Images folder¶
We've explored the Annotations folder, now let's check out our Images folder.
We know that the image file names come in the format class_name/image_name, for example, n02085620-Chihuahua/n02085620_5927.jpg.
To make things a little simpler, let's create the following:
- A mapping from folder name -> class name in dictionary form, for example,
{'n02113712-miniature_poodle': 'miniature_poodle', 'n02092339-Weimaraner': 'weimaraner', 'n02093991-Irish_terrier': 'irish_terrier'...}. This will help us when visualizing our data from its original folder. - A list of all unique dog class names with simple formatting, for example,
['affenpinscher', 'afghan_hound', 'african_hunting_dog', 'airedale', 'american_staffordshire_terrier'...].
Let's start by getting a list of all the folders in the Images directory with os.listdir().
# Get a list of all image folders
image_folders = os.listdir("Images")
image_folders[:10]
['n02086240-Shih-Tzu', 'n02113978-Mexican_hairless', 'n02086646-Blenheim_spaniel', 'n02108089-boxer', 'n02107908-Appenzeller', 'n02105251-briard', 'n02097474-Tibetan_terrier', 'n02097209-standard_schnauzer', 'n02089973-English_foxhound', 'n02109525-Saint_Bernard']
Excellent!
Now let's make a dictionary which maps from the folder name to a simplified version of the class name, for example:
{'n02085782-Japanese_spaniel': 'japanese_spaniel',
'n02106662-German_shepherd': 'german_shepherd',
'n02093256-Staffordshire_bullterrier': 'staffordshire_bullterrier',
...}
# Create folder name -> class name dict
folder_to_class_name_dict = {}
for folder_name in image_folders:
# Turn folder name into class_name
# E.g. "n02089078-black-and-tan_coonhound" -> "black_and_tan_coonhound"
# We'll split on the first "-" and join the rest of the string with "_" and then lower it
class_name = "_".join(folder_name.split("-")[1:]).lower()
folder_to_class_name_dict[folder_name] = class_name
# Make sure there are 120 entries in the dictionary
assert len(folder_to_class_name_dict) == 120
Folder name to class name mapping created, let's view the first 10.
sorted(folder_to_class_name_dict.items())[:10]
[('n02085620-Chihuahua', 'chihuahua'),
('n02085782-Japanese_spaniel', 'japanese_spaniel'),
('n02085936-Maltese_dog', 'maltese_dog'),
('n02086079-Pekinese', 'pekinese'),
('n02086240-Shih-Tzu', 'shih_tzu'),
('n02086646-Blenheim_spaniel', 'blenheim_spaniel'),
('n02086910-papillon', 'papillon'),
('n02087046-toy_terrier', 'toy_terrier'),
('n02087394-Rhodesian_ridgeback', 'rhodesian_ridgeback'),
('n02088094-Afghan_hound', 'afghan_hound')]
And we can get a list of unique dog names by getting the values() of the folder_to_class_name_dict and turning it into a list.
dog_names = sorted(list(folder_to_class_name_dict.values()))
dog_names[:10]
['affenpinscher', 'afghan_hound', 'african_hunting_dog', 'airedale', 'american_staffordshire_terrier', 'appenzeller', 'australian_terrier', 'basenji', 'basset', 'beagle']
Perfect!
Now we've got:
folder_to_class_name_dict- a mapping from the folder name to the class name.dog_names- a list of all the unique dog breeds we're working with.
Visualize a group of random images¶
How about we follow the data explorers motto of visualize, visualize, visualize and view some random images?
To help us visualize, let's create a function that takes in a list of image paths and then randomly selects 10 of those paths to display.
The function will:
- Take in a select list of image paths.
- Create a grid of matplotlib plots (e.g. 2x5 = 10 plots to plot on).
- Randomly sample 10 image paths from the input image path list (using
random.sample()). - Iterate through the flattened axes via
axes.flatwhich is a reference to the attributenumpy.ndarray.flat. - Extract the sample path from the list of samples.
- Get the sample title from the parent folder of the path using
Path.parent.stemand then extract the formatted dog breed name by indexingfolder_to_class_name_dict. - Read the image with
plt.imread()and show it on the targetaxwithax.imshow(). - Set the title of the plot to the parent folder name with
ax.set_title()and turn the axis marks of withax.axis("off")(this makes for pretty plots). - Show the plot with
plt.show().
Woah!
A lot of steps! But nothing we can't handle, let's do it.
from typing import List
from pathlib import Path
import matplotlib.pyplot as plt
import random
# 1. Take in a select list of image paths
def plot_10_random_images_from_path_list(path_list: List[Path],
extract_title=True) -> None:
# 2. Set up a grid of plots
fig, axes = plt.subplots(nrows=2, ncols=5, figsize=(20, 10))
# 3. Randomly sample 10 paths from the list
samples = random.sample(path_list, 10)
# 4. Iterate through the flattened axes and corresponding sample paths
for i, ax in enumerate(axes.flat):
# 5. Get the target sample path (e.g. "Images/n02087394-Rhodesian_ridgeback/n02087394_1161.jpg")
sample_path = samples[i]
# 6. Extract the parent directory name to use as the title (if necessary)
# (e.g. n02087394-Rhodesian_ridgeback/n02087394_1161.jpg -> n02087394-Rhodesian_ridgeback -> rhodesian_ridgeback)
if extract_title:
sample_title = folder_to_class_name_dict[sample_path.parent.stem]
else:
sample_title = sample_path.parent.stem
# 7. Read the image file and plot it on the corresponding axis
ax.imshow(plt.imread(sample_path))
# 8. Set the title of the axis and turn of the axis (for pretty plots)
ax.set_title(sample_title)
ax.axis("off")
# 9. Display the plot
plt.show()
plot_10_random_images_from_path_list(path_list=[Path("Images") / Path(file) for file in train_file_list])
Those are some nice looking dogs!
What I like to do here is rerun the random visualizations until I've seen 100+ samples so I've got an idea of the data we're working with.
Question: Here's something to think about, how would you code a system to differentiate between all the different breeds of dogs? Perhaps you write an algorithm to look at the shapes or the colours? You might be thinking "that would take quite a long time..." And you'd be right. Then how would we do it? Machine learning of course!
Exploring the distribution of our data¶
After visualization, another valuable way to explore the data is by checking the data distribution.
Distribution refers to the "spread" of data.
In our case, how many images of dogs do we have per breed?
A balanced distribution would mean having roughly the same number of images for each breed (e.g. 100 images per dog breed).
Note: There's a deeper level of distribution than just images per dog breed. Ideally, the images for each different breed are well distributed as well. For example, we wouldn't want to have 100 of the same image per dog breed. Not only would we like a similar number of images per breed, we'd like the images of each particular breed to be in different scenarios, different lighting, different angles. We want this because we want to our model to be able to recognize the correct dog breed no matter what angle the photo is taken from.
To figure out how many images we have per class, let's write a function count the number of images per subfolder in a given directory.
Specifically, we'll want the function to:
- Take in a target directory/folder.
- Create a list of all the subdirectories/subfolders in the target folder.
- Create an empty list,
image_class_countsto append subfolders and their counts to. - Iterate through all of the subdirectories.
- Get the class name of the target folder as the name of the folder.
- Count the number of images in the target folder using the length of the list of image paths (we can get these with
Path().rglob(*.jpg)where*.jpgmeans "all files with the extension.jpg. - Append a dictionary of
{"class_name": class_name, "image_count": image_count}to theimage_class_countslist (we create a list of dictionaries so we can turn this into a pandas DataFrame). - Return the
image_class_countslist.
# Create a dictionary of image counts
from pathlib import Path
from typing import List, Dict
# 1. Take in a target directory
def count_images_in_subdirs(target_directory: str) -> List[Dict[str, int]]:
"""
Counts the number of JPEG images in each subdirectory of the given directory.
Each subdirectory is assumed to represent a class, and the function counts
the number of '.jpg' files within each one. The result is a list of
dictionaries with the class name and corresponding image count.
Args:
target_directory (str): The path to the directory containing subdirectories.
Returns:
List[Dict[str, int]]: A list of dictionaries with 'class_name' and 'image_count' for each subdirectory.
Examples:
>>> count_images_in_subdirs('/path/to/directory')
[{'class_name': 'beagle', 'image_count': 50}, {'class_name': 'poodle', 'image_count': 60}]
"""
# 2. Create a list of all the subdirectoires in the target directory (these contain our images)
images_dir = Path(target_directory)
image_class_dirs = [directory for directory in images_dir.iterdir() if directory.is_dir()]
# 3. Create an empty list to append image counts to
image_class_counts = []
# 4. Iterate through all of the subdirectories
for image_class_dir in image_class_dirs:
# 5. Get the class name from image directory (e.g. "Images/n02116738-African_hunting_dog" -> "n02116738-African_hunting_dog")
class_name = image_class_dir.stem
# 6. Count the number of images in the target subdirectory
image_count = len(list(image_class_dir.rglob("*.jpg"))) # get length all files with .jpg file extension
# 7. Append a dictionary of class name and image count to count list
image_class_counts.append({"class_name": class_name,
"image_count": image_count})
# 8. Return the list
return image_class_counts
Ho ho, what a function!
Let's run it on our target directory Images and view the first few indexes.
image_class_counts = count_images_in_subdirs("Images")
image_class_counts[:3]
[{'class_name': 'n02086240-Shih-Tzu', 'image_count': 214},
{'class_name': 'n02113978-Mexican_hairless', 'image_count': 155},
{'class_name': 'n02086646-Blenheim_spaniel', 'image_count': 188}]
Nice!
Since our image_class_counts variable is the form of a list of dictionaries, we can turn it into a pandas DataFrame.
Let's sort the DataFrame by "image_count" so the classes with the most images appear at the top, we can do so with DataFrame.sort_values().
# Create a DataFrame
import pandas as pd
image_counts_df = pd.DataFrame(image_class_counts).sort_values(by="image_count", ascending=False)
image_counts_df.head()
| class_name | image_count | |
|---|---|---|
| 71 | n02085936-Maltese_dog | 252 |
| 32 | n02088094-Afghan_hound | 239 |
| 91 | n02092002-Scottish_deerhound | 232 |
| 117 | n02112018-Pomeranian | 219 |
| 35 | n02107683-Bernese_mountain_dog | 218 |
And let's cleanup the "class_name" column to be more readable by mapping the the values to our folder_to_class_name_dict.
# Make class name column easier to read
image_counts_df["class_name"] = image_counts_df["class_name"].map(folder_to_class_name_dict)
image_counts_df.head()
| class_name | image_count | |
|---|---|---|
| 71 | maltese_dog | 252 |
| 32 | afghan_hound | 239 |
| 91 | scottish_deerhound | 232 |
| 117 | pomeranian | 219 |
| 35 | bernese_mountain_dog | 218 |
Now we've got a DataFrame of image counts per class, we can make them more visual by turning them into a plot.
We covered plotting data directly from pandas DataFrame's in Section 3 of the Introduction to Matplotlib notebook: Plotting data directly with pandas.
To do so, we can use image_counts_df.plot(kind="bar", ...) along with some other customization.
# Turn the image counts DataFrame into a graph
import matplotlib.pyplot as plt
plt.figure(figsize=(14, 7))
image_counts_df.plot(kind="bar",
x="class_name",
y="image_count",
legend=False,
ax=plt.gca()) # plt.gca() = "get current axis", get the plt we setup above and put the data there
# Add customization
plt.ylabel("Image Count")
plt.title("Total Image Counts by Class")
plt.xticks(rotation=90, # Rotate the x labels for better visibility
fontsize=8) # Make the font size smaller for easier reading
plt.tight_layout() # Ensure things fit nicely
plt.show()
Beautiful! It looks like our classes are quite balanced. Each breed of dog has ~150 or more images.
We can find out some other quick stats about our data with DataFrame.describe().
# Get various statistics about our data distribution
image_counts_df.describe()
| image_count | |
|---|---|
| count | 120.000000 |
| mean | 171.500000 |
| std | 23.220898 |
| min | 148.000000 |
| 25% | 152.750000 |
| 50% | 159.500000 |
| 75% | 186.250000 |
| max | 252.000000 |
And the table shows a similar story to the plot. We can see the minimum number of images per class is 148, where as the maximum number of images is 252.
If one class had 10x less images than another class, we may look into collecting more data to improve the balance.
The main takeaway(s):
- When working on a classification problem, ideally, all classes have a similar number of samples (however, in some problems this may be unattainable, such as fraud detection, where you may have 1000x more "not fraud" samples to "fraud" samples.
- If you wanted to add a new class of dog breed to the existing 120, ideally, you'd have at least ~150 images for it.
TK - Creating training and test data split directories¶
After exploring the data, one of the next best things you can do is create experimental data splits.
This includes:
| Set Name | Description | Typical Percentage of Data |
|---|---|---|
| Training Set | A dataset for the model to learn on | 70-80% |
| Testing Set | A dataset for the model to be evaluated on | 20-30% |
| (Optional) Validation Set | A dataset to tune the model on | 50% of the test data |
| (Optional) Smaller Training Set | A smaller size dataset to run quick experiments on | 5-20% of the training set |
Our dog dataset already comes with specified training and test set splits.
So we'll stick with those.
But we'll also create a smaller training set (a random 10% of the training data) so we can stick to the machine learning engineers motto of experiment, experiment, experiment! and run quicker experiments.
Note: One of the most important things in machine learning is being able to experiment quickly. As in, try a new model, try a new set of hyperparameters or try a new training setup. When you start out, you want the time between your experiments to be as small as possible so you can quickly figure out what doesn't work so you can spend more time on and run larger experiments with what does work.
As previously discussed, we're working towards a directory structure of:
images_split/
├── train/
│ ├── class_1/
│ │ ├── train_image1.jpg
│ │ ├── train_image2.jpg
│ │ └── ...
│ ├── class_2/
│ │ ├── train_image1.jpg
│ │ ├── train_image2.jpg
│ │ └── ...
└── test/
├── class_1/
│ ├── test_image1.jpg
│ ├── test_image2.jpg
│ └── ...
├── class_2/
│ ├── test_image1.jpg
│ ├── test_image2.jpg
...
So let's write some code to create:
images/train/directory.images/test/directory.- Make a directory inside each of
images/train/andimages/test/for each of the dog breed classes.
We can make each of the directories we need using Path.mkdir().
For the dog breed directories, we'll loop through the list of dog_names and create a folder for each inside the images/train/ and images/test/ directories.
from pathlib import Path
# Define the target directory for image splits to go
images_split_dir = Path("images_split")
# Define the training and test directories
train_dir = images_split_dir / "train"
test_dir = images_split_dir / "test"
# Using Path.mkdir with exist_ok=True ensures the directory is created only if it doesn't exist
train_dir.mkdir(parents=True, exist_ok=True)
test_dir.mkdir(parents=True, exist_ok=True)
print(f"Directory {train_dir} is ensured to exist.")
print(f"Directory {test_dir} is ensured to exist.")
# Make a folder for each dog name
for dog_name in dog_names:
# Make training dir folder
train_class_dir = train_dir / dog_name
train_class_dir.mkdir(parents=True, exist_ok=True)
# print(f"Making directory: {train_class_dir}")
# Make testing dir folder
test_class_dir = test_dir / dog_name
test_class_dir.mkdir(parents=True, exist_ok=True)
# print(f"Making directory: {test_class_dir}")
# Make sure there is 120 subfolders in each
assert count_subfolders(train_dir) == len(dog_names)
assert count_subfolders(test_dir) == len(dog_names)
Directory images_split/train is ensured to exist. Directory images_split/test is ensured to exist.
Excellent!
We can check out the data split directories/folders we created by inspecting them in the files panel in Google Colab.
Alternatively, we can check the names of each by list the subdirectories inside them.
# See the first 10 directories in the training split dir
sorted([str(dir_name) for dir_name in train_dir.iterdir() if dir_name.is_dir()])[:10]
['images_split/train/affenpinscher', 'images_split/train/afghan_hound', 'images_split/train/african_hunting_dog', 'images_split/train/airedale', 'images_split/train/american_staffordshire_terrier', 'images_split/train/appenzeller', 'images_split/train/australian_terrier', 'images_split/train/basenji', 'images_split/train/basset', 'images_split/train/beagle']
You might've noticed that all of our dog breed directories are empty.
Let's change that by getting some images in there.
To do so, we'll create a function called copy_files_to_target_dir() which will copy images from the Images directory into their respective directories inside images/train and images/test.
More specifically, it will:
- Take in a list of source files to copy (e.g.
train_file_list) and a target directory to copy files to. - Iterate through the list of sources files to copy (we'll use
tqdmwhich comes installed with Google Colab to create a progress bar of how many files have been copied). - Convert the source file path to a
Pathobject. - Split the source file path and create a
Pathobject for the destination folder (e.g. "n02112018-Pomeranian" -> "pomeranian"). - Get the target file name (e.g. "n02112018-Pomeranian/n02112018_6208.jpg" -> "n02112018_6208.jpg").
- Create a destination path for the source file to be copied to (e.g.
images_split/train/pomeranian/n02112018_6208.jpg). - Ensure the destination directory exists, similar to the step we took in the previous section (you can't copy files to a directory that doesn't exist).
- Print out the progress of copying (if necessary).
- Copy the source file to the destination using Python's
shutil.copy2(src, dst).
from pathlib import Path
from shutil import copy2
from tqdm.auto import tqdm
# 1. Take in a list of source files to copy and a target directory
def copy_files_to_target_dir(file_list: list[str],
target_dir: str,
images_dir: str = "Images",
verbose: bool = False) -> None:
"""
Copies a list of files from the images directory to a target directory.
Parameters:
file_list (list[str]): A list of file paths to copy.
target_dir (str): The destination directory path where files will be copied.
images_dir (str, optional): The directory path where the images are currently stored. Defaults to 'Images'.
verbose (bool, optional): If set to True, the function will print out the file paths as they are being copied. Defaults to False.
Returns:
None
"""
# 2. Iterate through source files
for file in tqdm(file_list):
# 3. Convert file path to a Path object
source_file_path = Path(images_dir) / Path(file)
# 4. Split the file path and create a Path object for the destination folder
# e.g. "n02112018-Pomeranian" -> "pomeranian"
file_class_name = folder_to_class_name_dict[Path(file).parts[0]]
# 5. Get the name of the target image
file_image_name = Path(file).name
# 6. Create the destination path
destination_file_path = Path(target_dir) / file_class_name / file_image_name
# 7. Ensure the destination directory exists (this is a safety check, can't copy an image to a file that doesn't exist)
destination_file_path.parent.mkdir(parents=True, exist_ok=True)
# 8. Print out copy message if necessary
if verbose:
print(f"[INFO] Copying: {source_file_path} to {destination_file_path}")
# 9. Copy the original path to the destination path
copy2(src=source_file_path, dst=destination_file_path)
Copying function created!
Let's test it out by copying the files in the train_file_list to train_dir.
# Copy training images from Images to images_split/train/...
copy_files_to_target_dir(file_list=train_file_list,
target_dir=train_dir,
verbose=False) # set this to True to get an output of the copy process
# (warning: this will output a large amount of text)
0%| | 0/12000 [00:00<?, ?it/s]
Woohoo!
Looks like our copying function copied 12000 training images in their respective directories inside images_split/train/.
How about we do the same for test_file_list and test_dir?
copy_files_to_target_dir(file_list=test_file_list,
target_dir=test_dir,
verbose=False)
0%| | 0/8580 [00:00<?, ?it/s]
Nice! 8580 testing images copied from Images to images_split/test/.
Let's write some code to check that the number of files in the train_file_list is the same as the number of images files in train_dir (and the same for the test files).
# Get list of of all .jpg paths in train and test image directories
train_image_paths = list(train_dir.rglob("*.jpg"))
test_image_paths = list(test_dir.rglob("*.jpg"))
# Make sure the number of images in the training and test directories equals the number of files in their original lists
assert len(train_image_paths) == len(train_file_list)
assert len(test_image_paths) == len(test_file_list)
print(f"Number of images in {train_dir}: {len(train_image_paths)}")
print(f"Number of images in {test_dir}: {len(test_image_paths)}")
Number of images in images_split/train: 12000 Number of images in images_split/test: 8580
And adhering to the data explorers motto of visualize, visualize, visualize!, let's plot some random images from the train_image_paths list.
# Plot 10 random images from the train_image_paths
plot_10_random_images_from_path_list(path_list=train_image_paths,
extract_title=False) # don't need to extract the title since the image directories are already named simply
TK - Make a 10% training dataset¶
UPTOHERE
TK image - make an image diagram of the image split folder we're going to make e.g. train_10_percent...
Why make this folder? (quicker experiments, faster to see if something works before scaling things up)
Can copy a random 10% of the training images into a new folder
Try to train a model on a smaller amount of data
# TK - get the train file paths
# Get a random 10% of them
# Copy them to a target directory, e.g. train_dir_10_percent
# Create train_10_percent directory
train_10_percent_dir = images_split_dir / "train_10_percent"
train_10_percent_dir.mkdir(parents=True, exist_ok=True)
import random
random.seed(42)
train_image_paths_random_10_percent = random.sample(population=train_image_paths,
k=int(0.1*len(train_image_paths)))
len(train_image_paths_random_10_percent)
for path in tqdm(train_image_paths_random_10_percent):
source_file_path = path
destination_file_path = train_10_percent_dir / Path(*path.parts[-2:])
print(destination_file_path.parent)
# If the target directory doesn't exist, make it
target_class_dir = destination_file_path.parent
if not target_class_dir.is_dir():
print(f"Making directory: {target_class_dir}")
target_class_dir.mkdir(parents=True,
exist_ok=True)
print(f"Copying: {source_file_path} to {destination_file_path}")
copy2(src=source_file_path,
dst=destination_file_path)
0%| | 0/1200 [00:00<?, ?it/s]
images_split/train_10_percent/clumber Making directory: images_split/train_10_percent/clumber Copying: images_split/train/clumber/n02101556_7528.jpg to images_split/train_10_percent/clumber/n02101556_7528.jpg images_split/train_10_percent/komondor Making directory: images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_1406.jpg to images_split/train_10_percent/komondor/n02105505_1406.jpg images_split/train_10_percent/newfoundland Making directory: images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_10160.jpg to images_split/train_10_percent/newfoundland/n02111277_10160.jpg images_split/train_10_percent/afghan_hound Making directory: images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_4049.jpg to images_split/train_10_percent/afghan_hound/n02088094_4049.jpg images_split/train_10_percent/briard Making directory: images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_7805.jpg to images_split/train_10_percent/briard/n02105251_7805.jpg images_split/train_10_percent/shetland_sheepdog Making directory: images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_5719.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_5719.jpg images_split/train_10_percent/malinois Making directory: images_split/train_10_percent/malinois Copying: images_split/train/malinois/n02105162_9995.jpg to images_split/train_10_percent/malinois/n02105162_9995.jpg images_split/train_10_percent/scottish_deerhound Making directory: images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_15064.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_15064.jpg images_split/train_10_percent/appenzeller Making directory: images_split/train_10_percent/appenzeller Copying: images_split/train/appenzeller/n02107908_2092.jpg to images_split/train_10_percent/appenzeller/n02107908_2092.jpg images_split/train_10_percent/miniature_schnauzer Making directory: images_split/train_10_percent/miniature_schnauzer Copying: images_split/train/miniature_schnauzer/n02097047_6813.jpg to images_split/train_10_percent/miniature_schnauzer/n02097047_6813.jpg images_split/train_10_percent/ibizan_hound Making directory: images_split/train_10_percent/ibizan_hound Copying: images_split/train/ibizan_hound/n02091244_5818.jpg to images_split/train_10_percent/ibizan_hound/n02091244_5818.jpg images_split/train_10_percent/australian_terrier Making directory: images_split/train_10_percent/australian_terrier Copying: images_split/train/australian_terrier/n02096294_1231.jpg to images_split/train_10_percent/australian_terrier/n02096294_1231.jpg images_split/train_10_percent/bernese_mountain_dog Making directory: images_split/train_10_percent/bernese_mountain_dog Copying: images_split/train/bernese_mountain_dog/n02107683_1421.jpg to images_split/train_10_percent/bernese_mountain_dog/n02107683_1421.jpg images_split/train_10_percent/maltese_dog Making directory: images_split/train_10_percent/maltese_dog Copying: images_split/train/maltese_dog/n02085936_16565.jpg to images_split/train_10_percent/maltese_dog/n02085936_16565.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_3896.jpg to images_split/train_10_percent/newfoundland/n02111277_3896.jpg images_split/train_10_percent/blenheim_spaniel Making directory: images_split/train_10_percent/blenheim_spaniel Copying: images_split/train/blenheim_spaniel/n02086646_3059.jpg to images_split/train_10_percent/blenheim_spaniel/n02086646_3059.jpg images_split/train_10_percent/weimaraner Making directory: images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_1796.jpg to images_split/train_10_percent/weimaraner/n02092339_1796.jpg images_split/train_10_percent/dingo Making directory: images_split/train_10_percent/dingo Copying: images_split/train/dingo/n02115641_5815.jpg to images_split/train_10_percent/dingo/n02115641_5815.jpg images_split/train_10_percent/border_collie Making directory: images_split/train_10_percent/border_collie Copying: images_split/train/border_collie/n02106166_1204.jpg to images_split/train_10_percent/border_collie/n02106166_1204.jpg images_split/train_10_percent/flat_coated_retriever Making directory: images_split/train_10_percent/flat_coated_retriever Copying: images_split/train/flat_coated_retriever/n02099267_2127.jpg to images_split/train_10_percent/flat_coated_retriever/n02099267_2127.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_939.jpg to images_split/train_10_percent/newfoundland/n02111277_939.jpg images_split/train_10_percent/african_hunting_dog Making directory: images_split/train_10_percent/african_hunting_dog Copying: images_split/train/african_hunting_dog/n02116738_4758.jpg to images_split/train_10_percent/african_hunting_dog/n02116738_4758.jpg images_split/train_10_percent/english_springer Making directory: images_split/train_10_percent/english_springer Copying: images_split/train/english_springer/n02102040_3096.jpg to images_split/train_10_percent/english_springer/n02102040_3096.jpg images_split/train_10_percent/silky_terrier Making directory: images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_4402.jpg to images_split/train_10_percent/silky_terrier/n02097658_4402.jpg images_split/train_10_percent/mexican_hairless Making directory: images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_356.jpg to images_split/train_10_percent/mexican_hairless/n02113978_356.jpg images_split/train_10_percent/english_foxhound Making directory: images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_1078.jpg to images_split/train_10_percent/english_foxhound/n02089973_1078.jpg images_split/train_10_percent/miniature_schnauzer Copying: images_split/train/miniature_schnauzer/n02097047_1825.jpg to images_split/train_10_percent/miniature_schnauzer/n02097047_1825.jpg images_split/train_10_percent/bull_mastiff Making directory: images_split/train_10_percent/bull_mastiff Copying: images_split/train/bull_mastiff/n02108422_207.jpg to images_split/train_10_percent/bull_mastiff/n02108422_207.jpg images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_7495.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_7495.jpg images_split/train_10_percent/rottweiler Making directory: images_split/train_10_percent/rottweiler Copying: images_split/train/rottweiler/n02106550_1742.jpg to images_split/train_10_percent/rottweiler/n02106550_1742.jpg images_split/train_10_percent/australian_terrier Copying: images_split/train/australian_terrier/n02096294_7295.jpg to images_split/train_10_percent/australian_terrier/n02096294_7295.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_8682.jpg to images_split/train_10_percent/afghan_hound/n02088094_8682.jpg images_split/train_10_percent/saluki Making directory: images_split/train_10_percent/saluki Copying: images_split/train/saluki/n02091831_3760.jpg to images_split/train_10_percent/saluki/n02091831_3760.jpg images_split/train_10_percent/papillon Making directory: images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_4883.jpg to images_split/train_10_percent/papillon/n02086910_4883.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_3119.jpg to images_split/train_10_percent/english_foxhound/n02089973_3119.jpg images_split/train_10_percent/bernese_mountain_dog Copying: images_split/train/bernese_mountain_dog/n02107683_4350.jpg to images_split/train_10_percent/bernese_mountain_dog/n02107683_4350.jpg images_split/train_10_percent/brittany_spaniel Making directory: images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_10527.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_10527.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_9523.jpg to images_split/train_10_percent/afghan_hound/n02088094_9523.jpg images_split/train_10_percent/borzoi Making directory: images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_6976.jpg to images_split/train_10_percent/borzoi/n02090622_6976.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_205.jpg to images_split/train_10_percent/weimaraner/n02092339_205.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_2529.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_2529.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_14858.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_14858.jpg images_split/train_10_percent/blenheim_spaniel Copying: images_split/train/blenheim_spaniel/n02086646_669.jpg to images_split/train_10_percent/blenheim_spaniel/n02086646_669.jpg images_split/train_10_percent/whippet Making directory: images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_18392.jpg to images_split/train_10_percent/whippet/n02091134_18392.jpg images_split/train_10_percent/blenheim_spaniel Copying: images_split/train/blenheim_spaniel/n02086646_3315.jpg to images_split/train_10_percent/blenheim_spaniel/n02086646_3315.jpg images_split/train_10_percent/walker_hound Making directory: images_split/train_10_percent/walker_hound Copying: images_split/train/walker_hound/n02089867_3456.jpg to images_split/train_10_percent/walker_hound/n02089867_3456.jpg images_split/train_10_percent/german_short_haired_pointer Making directory: images_split/train_10_percent/german_short_haired_pointer Copying: images_split/train/german_short_haired_pointer/n02100236_156.jpg to images_split/train_10_percent/german_short_haired_pointer/n02100236_156.jpg images_split/train_10_percent/flat_coated_retriever Copying: images_split/train/flat_coated_retriever/n02099267_198.jpg to images_split/train_10_percent/flat_coated_retriever/n02099267_198.jpg images_split/train_10_percent/cocker_spaniel Making directory: images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_9822.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_9822.jpg images_split/train_10_percent/bloodhound Making directory: images_split/train_10_percent/bloodhound Copying: images_split/train/bloodhound/n02088466_9287.jpg to images_split/train_10_percent/bloodhound/n02088466_9287.jpg images_split/train_10_percent/bouvier_des_flandres Making directory: images_split/train_10_percent/bouvier_des_flandres Copying: images_split/train/bouvier_des_flandres/n02106382_2087.jpg to images_split/train_10_percent/bouvier_des_flandres/n02106382_2087.jpg images_split/train_10_percent/pomeranian Making directory: images_split/train_10_percent/pomeranian Copying: images_split/train/pomeranian/n02112018_12953.jpg to images_split/train_10_percent/pomeranian/n02112018_12953.jpg images_split/train_10_percent/irish_setter Making directory: images_split/train_10_percent/irish_setter Copying: images_split/train/irish_setter/n02100877_3006.jpg to images_split/train_10_percent/irish_setter/n02100877_3006.jpg images_split/train_10_percent/miniature_pinscher Making directory: images_split/train_10_percent/miniature_pinscher Copying: images_split/train/miniature_pinscher/n02107312_5299.jpg to images_split/train_10_percent/miniature_pinscher/n02107312_5299.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_9398.jpg to images_split/train_10_percent/whippet/n02091134_9398.jpg images_split/train_10_percent/golden_retriever Making directory: images_split/train_10_percent/golden_retriever Copying: images_split/train/golden_retriever/n02099601_142.jpg to images_split/train_10_percent/golden_retriever/n02099601_142.jpg images_split/train_10_percent/boxer Making directory: images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_926.jpg to images_split/train_10_percent/boxer/n02108089_926.jpg images_split/train_10_percent/standard_schnauzer Making directory: images_split/train_10_percent/standard_schnauzer Copying: images_split/train/standard_schnauzer/n02097209_2423.jpg to images_split/train_10_percent/standard_schnauzer/n02097209_2423.jpg images_split/train_10_percent/shih_tzu Making directory: images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_6032.jpg to images_split/train_10_percent/shih_tzu/n02086240_6032.jpg images_split/train_10_percent/airedale Making directory: images_split/train_10_percent/airedale Copying: images_split/train/airedale/n02096051_3088.jpg to images_split/train_10_percent/airedale/n02096051_3088.jpg images_split/train_10_percent/german_shepherd Making directory: images_split/train_10_percent/german_shepherd Copying: images_split/train/german_shepherd/n02106662_22730.jpg to images_split/train_10_percent/german_shepherd/n02106662_22730.jpg images_split/train_10_percent/welsh_springer_spaniel Making directory: images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_1798.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_1798.jpg images_split/train_10_percent/norwich_terrier Making directory: images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_188.jpg to images_split/train_10_percent/norwich_terrier/n02094258_188.jpg images_split/train_10_percent/gordon_setter Making directory: images_split/train_10_percent/gordon_setter Copying: images_split/train/gordon_setter/n02101006_1297.jpg to images_split/train_10_percent/gordon_setter/n02101006_1297.jpg images_split/train_10_percent/greater_swiss_mountain_dog Making directory: images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_2005.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_2005.jpg images_split/train_10_percent/bloodhound Copying: images_split/train/bloodhound/n02088466_654.jpg to images_split/train_10_percent/bloodhound/n02088466_654.jpg images_split/train_10_percent/west_highland_white_terrier Making directory: images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_5057.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_5057.jpg images_split/train_10_percent/border_terrier Making directory: images_split/train_10_percent/border_terrier Copying: images_split/train/border_terrier/n02093754_1102.jpg to images_split/train_10_percent/border_terrier/n02093754_1102.jpg images_split/train_10_percent/eskimo_dog Making directory: images_split/train_10_percent/eskimo_dog Copying: images_split/train/eskimo_dog/n02109961_8835.jpg to images_split/train_10_percent/eskimo_dog/n02109961_8835.jpg images_split/train_10_percent/japanese_spaniel Making directory: images_split/train_10_percent/japanese_spaniel Copying: images_split/train/japanese_spaniel/n02085782_23.jpg to images_split/train_10_percent/japanese_spaniel/n02085782_23.jpg images_split/train_10_percent/dingo Copying: images_split/train/dingo/n02115641_726.jpg to images_split/train_10_percent/dingo/n02115641_726.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_1592.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_1592.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_15846.jpg to images_split/train_10_percent/whippet/n02091134_15846.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_3233.jpg to images_split/train_10_percent/afghan_hound/n02088094_3233.jpg images_split/train_10_percent/italian_greyhound Making directory: images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_5134.jpg to images_split/train_10_percent/italian_greyhound/n02091032_5134.jpg images_split/train_10_percent/clumber Copying: images_split/train/clumber/n02101556_7574.jpg to images_split/train_10_percent/clumber/n02101556_7574.jpg images_split/train_10_percent/german_shepherd Copying: images_split/train/german_shepherd/n02106662_22764.jpg to images_split/train_10_percent/german_shepherd/n02106662_22764.jpg images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_4373.jpg to images_split/train_10_percent/papillon/n02086910_4373.jpg images_split/train_10_percent/norwegian_elkhound Making directory: images_split/train_10_percent/norwegian_elkhound Copying: images_split/train/norwegian_elkhound/n02091467_4761.jpg to images_split/train_10_percent/norwegian_elkhound/n02091467_4761.jpg images_split/train_10_percent/walker_hound Copying: images_split/train/walker_hound/n02089867_90.jpg to images_split/train_10_percent/walker_hound/n02089867_90.jpg images_split/train_10_percent/kuvasz Making directory: images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_1214.jpg to images_split/train_10_percent/kuvasz/n02104029_1214.jpg images_split/train_10_percent/lakeland_terrier Making directory: images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_916.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_916.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_10178.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_10178.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_2068.jpg to images_split/train_10_percent/english_foxhound/n02089973_2068.jpg images_split/train_10_percent/tibetan_mastiff Making directory: images_split/train_10_percent/tibetan_mastiff Copying: images_split/train/tibetan_mastiff/n02108551_143.jpg to images_split/train_10_percent/tibetan_mastiff/n02108551_143.jpg images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_3670.jpg to images_split/train_10_percent/mexican_hairless/n02113978_3670.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_169.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_169.jpg images_split/train_10_percent/toy_poodle Making directory: images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_5723.jpg to images_split/train_10_percent/toy_poodle/n02113624_5723.jpg images_split/train_10_percent/clumber Copying: images_split/train/clumber/n02101556_823.jpg to images_split/train_10_percent/clumber/n02101556_823.jpg images_split/train_10_percent/american_staffordshire_terrier Making directory: images_split/train_10_percent/american_staffordshire_terrier Copying: images_split/train/american_staffordshire_terrier/n02093428_5165.jpg to images_split/train_10_percent/american_staffordshire_terrier/n02093428_5165.jpg images_split/train_10_percent/irish_setter Copying: images_split/train/irish_setter/n02100877_3195.jpg to images_split/train_10_percent/irish_setter/n02100877_3195.jpg images_split/train_10_percent/bouvier_des_flandres Copying: images_split/train/bouvier_des_flandres/n02106382_2529.jpg to images_split/train_10_percent/bouvier_des_flandres/n02106382_2529.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_6907.jpg to images_split/train_10_percent/briard/n02105251_6907.jpg images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_4999.jpg to images_split/train_10_percent/papillon/n02086910_4999.jpg images_split/train_10_percent/pomeranian Copying: images_split/train/pomeranian/n02112018_9028.jpg to images_split/train_10_percent/pomeranian/n02112018_9028.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_10918.jpg to images_split/train_10_percent/whippet/n02091134_10918.jpg images_split/train_10_percent/pekinese Making directory: images_split/train_10_percent/pekinese Copying: images_split/train/pekinese/n02086079_12321.jpg to images_split/train_10_percent/pekinese/n02086079_12321.jpg images_split/train_10_percent/clumber Copying: images_split/train/clumber/n02101556_8352.jpg to images_split/train_10_percent/clumber/n02101556_8352.jpg images_split/train_10_percent/tibetan_terrier Making directory: images_split/train_10_percent/tibetan_terrier Copying: images_split/train/tibetan_terrier/n02097474_3180.jpg to images_split/train_10_percent/tibetan_terrier/n02097474_3180.jpg images_split/train_10_percent/african_hunting_dog Copying: images_split/train/african_hunting_dog/n02116738_1097.jpg to images_split/train_10_percent/african_hunting_dog/n02116738_1097.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_6752.jpg to images_split/train_10_percent/weimaraner/n02092339_6752.jpg images_split/train_10_percent/tibetan_terrier Copying: images_split/train/tibetan_terrier/n02097474_8540.jpg to images_split/train_10_percent/tibetan_terrier/n02097474_8540.jpg images_split/train_10_percent/irish_water_spaniel Making directory: images_split/train_10_percent/irish_water_spaniel Copying: images_split/train/irish_water_spaniel/n02102973_2805.jpg to images_split/train_10_percent/irish_water_spaniel/n02102973_2805.jpg images_split/train_10_percent/norfolk_terrier Making directory: images_split/train_10_percent/norfolk_terrier Copying: images_split/train/norfolk_terrier/n02094114_2739.jpg to images_split/train_10_percent/norfolk_terrier/n02094114_2739.jpg images_split/train_10_percent/border_terrier Copying: images_split/train/border_terrier/n02093754_7109.jpg to images_split/train_10_percent/border_terrier/n02093754_7109.jpg images_split/train_10_percent/maltese_dog Copying: images_split/train/maltese_dog/n02085936_1288.jpg to images_split/train_10_percent/maltese_dog/n02085936_1288.jpg images_split/train_10_percent/siberian_husky Making directory: images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_12656.jpg to images_split/train_10_percent/siberian_husky/n02110185_12656.jpg images_split/train_10_percent/standard_poodle Making directory: images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_2321.jpg to images_split/train_10_percent/standard_poodle/n02113799_2321.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_8504.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_8504.jpg images_split/train_10_percent/miniature_poodle Making directory: images_split/train_10_percent/miniature_poodle Copying: images_split/train/miniature_poodle/n02113712_3138.jpg to images_split/train_10_percent/miniature_poodle/n02113712_3138.jpg images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_4746.jpg to images_split/train_10_percent/kuvasz/n02104029_4746.jpg images_split/train_10_percent/chihuahua Making directory: images_split/train_10_percent/chihuahua Copying: images_split/train/chihuahua/n02085620_9654.jpg to images_split/train_10_percent/chihuahua/n02085620_9654.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_2069.jpg to images_split/train_10_percent/silky_terrier/n02097658_2069.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_3651.jpg to images_split/train_10_percent/siberian_husky/n02110185_3651.jpg images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_4672.jpg to images_split/train_10_percent/kuvasz/n02104029_4672.jpg images_split/train_10_percent/giant_schnauzer Making directory: images_split/train_10_percent/giant_schnauzer Copying: images_split/train/giant_schnauzer/n02097130_1235.jpg to images_split/train_10_percent/giant_schnauzer/n02097130_1235.jpg images_split/train_10_percent/cairn Making directory: images_split/train_10_percent/cairn Copying: images_split/train/cairn/n02096177_1000.jpg to images_split/train_10_percent/cairn/n02096177_1000.jpg images_split/train_10_percent/old_english_sheepdog Making directory: images_split/train_10_percent/old_english_sheepdog Copying: images_split/train/old_english_sheepdog/n02105641_8421.jpg to images_split/train_10_percent/old_english_sheepdog/n02105641_8421.jpg images_split/train_10_percent/sealyham_terrier Making directory: images_split/train_10_percent/sealyham_terrier Copying: images_split/train/sealyham_terrier/n02095889_136.jpg to images_split/train_10_percent/sealyham_terrier/n02095889_136.jpg images_split/train_10_percent/pomeranian Copying: images_split/train/pomeranian/n02112018_4639.jpg to images_split/train_10_percent/pomeranian/n02112018_4639.jpg images_split/train_10_percent/pembroke Making directory: images_split/train_10_percent/pembroke Copying: images_split/train/pembroke/n02113023_9001.jpg to images_split/train_10_percent/pembroke/n02113023_9001.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_9488.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_9488.jpg images_split/train_10_percent/malinois Copying: images_split/train/malinois/n02105162_6449.jpg to images_split/train_10_percent/malinois/n02105162_6449.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_2317.jpg to images_split/train_10_percent/briard/n02105251_2317.jpg images_split/train_10_percent/african_hunting_dog Copying: images_split/train/african_hunting_dog/n02116738_7988.jpg to images_split/train_10_percent/african_hunting_dog/n02116738_7988.jpg images_split/train_10_percent/collie Making directory: images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_16290.jpg to images_split/train_10_percent/collie/n02106030_16290.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_12877.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_12877.jpg images_split/train_10_percent/irish_wolfhound Making directory: images_split/train_10_percent/irish_wolfhound Copying: images_split/train/irish_wolfhound/n02090721_6715.jpg to images_split/train_10_percent/irish_wolfhound/n02090721_6715.jpg images_split/train_10_percent/samoyed Making directory: images_split/train_10_percent/samoyed Copying: images_split/train/samoyed/n02111889_1968.jpg to images_split/train_10_percent/samoyed/n02111889_1968.jpg images_split/train_10_percent/irish_wolfhound Copying: images_split/train/irish_wolfhound/n02090721_1862.jpg to images_split/train_10_percent/irish_wolfhound/n02090721_1862.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_7092.jpg to images_split/train_10_percent/standard_poodle/n02113799_7092.jpg images_split/train_10_percent/german_shepherd Copying: images_split/train/german_shepherd/n02106662_7122.jpg to images_split/train_10_percent/german_shepherd/n02106662_7122.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_40.jpg to images_split/train_10_percent/weimaraner/n02092339_40.jpg images_split/train_10_percent/malinois Copying: images_split/train/malinois/n02105162_1378.jpg to images_split/train_10_percent/malinois/n02105162_1378.jpg images_split/train_10_percent/sussex_spaniel Making directory: images_split/train_10_percent/sussex_spaniel Copying: images_split/train/sussex_spaniel/n02102480_5391.jpg to images_split/train_10_percent/sussex_spaniel/n02102480_5391.jpg images_split/train_10_percent/english_setter Making directory: images_split/train_10_percent/english_setter Copying: images_split/train/english_setter/n02100735_748.jpg to images_split/train_10_percent/english_setter/n02100735_748.jpg images_split/train_10_percent/ibizan_hound Copying: images_split/train/ibizan_hound/n02091244_530.jpg to images_split/train_10_percent/ibizan_hound/n02091244_530.jpg images_split/train_10_percent/bloodhound Copying: images_split/train/bloodhound/n02088466_8289.jpg to images_split/train_10_percent/bloodhound/n02088466_8289.jpg images_split/train_10_percent/bedlington_terrier Making directory: images_split/train_10_percent/bedlington_terrier Copying: images_split/train/bedlington_terrier/n02093647_2316.jpg to images_split/train_10_percent/bedlington_terrier/n02093647_2316.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_7602.jpg to images_split/train_10_percent/borzoi/n02090622_7602.jpg images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_447.jpg to images_split/train_10_percent/shih_tzu/n02086240_447.jpg images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_6207.jpg to images_split/train_10_percent/papillon/n02086910_6207.jpg images_split/train_10_percent/tibetan_mastiff Copying: images_split/train/tibetan_mastiff/n02108551_2025.jpg to images_split/train_10_percent/tibetan_mastiff/n02108551_2025.jpg images_split/train_10_percent/bernese_mountain_dog Copying: images_split/train/bernese_mountain_dog/n02107683_2567.jpg to images_split/train_10_percent/bernese_mountain_dog/n02107683_2567.jpg images_split/train_10_percent/redbone Making directory: images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_4146.jpg to images_split/train_10_percent/redbone/n02090379_4146.jpg images_split/train_10_percent/miniature_poodle Copying: images_split/train/miniature_poodle/n02113712_1590.jpg to images_split/train_10_percent/miniature_poodle/n02113712_1590.jpg images_split/train_10_percent/schipperke Making directory: images_split/train_10_percent/schipperke Copying: images_split/train/schipperke/n02104365_1325.jpg to images_split/train_10_percent/schipperke/n02104365_1325.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_9793.jpg to images_split/train_10_percent/whippet/n02091134_9793.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_1345.jpg to images_split/train_10_percent/redbone/n02090379_1345.jpg images_split/train_10_percent/great_dane Making directory: images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_18614.jpg to images_split/train_10_percent/great_dane/n02109047_18614.jpg images_split/train_10_percent/basset Making directory: images_split/train_10_percent/basset Copying: images_split/train/basset/n02088238_9446.jpg to images_split/train_10_percent/basset/n02088238_9446.jpg images_split/train_10_percent/kelpie Making directory: images_split/train_10_percent/kelpie Copying: images_split/train/kelpie/n02105412_3335.jpg to images_split/train_10_percent/kelpie/n02105412_3335.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_78.jpg to images_split/train_10_percent/boxer/n02108089_78.jpg images_split/train_10_percent/saluki Copying: images_split/train/saluki/n02091831_3067.jpg to images_split/train_10_percent/saluki/n02091831_3067.jpg images_split/train_10_percent/tibetan_mastiff Copying: images_split/train/tibetan_mastiff/n02108551_1700.jpg to images_split/train_10_percent/tibetan_mastiff/n02108551_1700.jpg images_split/train_10_percent/otterhound Making directory: images_split/train_10_percent/otterhound Copying: images_split/train/otterhound/n02091635_2948.jpg to images_split/train_10_percent/otterhound/n02091635_2948.jpg images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_4180.jpg to images_split/train_10_percent/komondor/n02105505_4180.jpg images_split/train_10_percent/tibetan_mastiff Copying: images_split/train/tibetan_mastiff/n02108551_239.jpg to images_split/train_10_percent/tibetan_mastiff/n02108551_239.jpg images_split/train_10_percent/irish_setter Copying: images_split/train/irish_setter/n02100877_378.jpg to images_split/train_10_percent/irish_setter/n02100877_378.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_9755.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_9755.jpg images_split/train_10_percent/sealyham_terrier Copying: images_split/train/sealyham_terrier/n02095889_4116.jpg to images_split/train_10_percent/sealyham_terrier/n02095889_4116.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_2737.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_2737.jpg images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_561.jpg to images_split/train_10_percent/komondor/n02105505_561.jpg images_split/train_10_percent/standard_schnauzer Copying: images_split/train/standard_schnauzer/n02097209_1491.jpg to images_split/train_10_percent/standard_schnauzer/n02097209_1491.jpg images_split/train_10_percent/leonberg Making directory: images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_3595.jpg to images_split/train_10_percent/leonberg/n02111129_3595.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_2055.jpg to images_split/train_10_percent/borzoi/n02090622_2055.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_1400.jpg to images_split/train_10_percent/italian_greyhound/n02091032_1400.jpg images_split/train_10_percent/black_and_tan_coonhound Making directory: images_split/train_10_percent/black_and_tan_coonhound Copying: images_split/train/black_and_tan_coonhound/n02089078_1025.jpg to images_split/train_10_percent/black_and_tan_coonhound/n02089078_1025.jpg images_split/train_10_percent/otterhound Copying: images_split/train/otterhound/n02091635_2482.jpg to images_split/train_10_percent/otterhound/n02091635_2482.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_7474.jpg to images_split/train_10_percent/silky_terrier/n02097658_7474.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_10818.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_10818.jpg images_split/train_10_percent/border_collie Copying: images_split/train/border_collie/n02106166_90.jpg to images_split/train_10_percent/border_collie/n02106166_90.jpg images_split/train_10_percent/cardigan Making directory: images_split/train_10_percent/cardigan Copying: images_split/train/cardigan/n02113186_11037.jpg to images_split/train_10_percent/cardigan/n02113186_11037.jpg images_split/train_10_percent/sussex_spaniel Copying: images_split/train/sussex_spaniel/n02102480_6390.jpg to images_split/train_10_percent/sussex_spaniel/n02102480_6390.jpg images_split/train_10_percent/bedlington_terrier Copying: images_split/train/bedlington_terrier/n02093647_2633.jpg to images_split/train_10_percent/bedlington_terrier/n02093647_2633.jpg images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_3802.jpg to images_split/train_10_percent/shih_tzu/n02086240_3802.jpg images_split/train_10_percent/standard_schnauzer Copying: images_split/train/standard_schnauzer/n02097209_213.jpg to images_split/train_10_percent/standard_schnauzer/n02097209_213.jpg images_split/train_10_percent/clumber Copying: images_split/train/clumber/n02101556_7986.jpg to images_split/train_10_percent/clumber/n02101556_7986.jpg images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_3093.jpg to images_split/train_10_percent/toy_poodle/n02113624_3093.jpg images_split/train_10_percent/english_springer Copying: images_split/train/english_springer/n02102040_3693.jpg to images_split/train_10_percent/english_springer/n02102040_3693.jpg images_split/train_10_percent/brabancon_griffon Making directory: images_split/train_10_percent/brabancon_griffon Copying: images_split/train/brabancon_griffon/n02112706_1814.jpg to images_split/train_10_percent/brabancon_griffon/n02112706_1814.jpg images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_1729.jpg to images_split/train_10_percent/papillon/n02086910_1729.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_10377.jpg to images_split/train_10_percent/collie/n02106030_10377.jpg images_split/train_10_percent/basset Copying: images_split/train/basset/n02088238_9324.jpg to images_split/train_10_percent/basset/n02088238_9324.jpg images_split/train_10_percent/black_and_tan_coonhound Copying: images_split/train/black_and_tan_coonhound/n02089078_2962.jpg to images_split/train_10_percent/black_and_tan_coonhound/n02089078_2962.jpg images_split/train_10_percent/flat_coated_retriever Copying: images_split/train/flat_coated_retriever/n02099267_3441.jpg to images_split/train_10_percent/flat_coated_retriever/n02099267_3441.jpg images_split/train_10_percent/irish_water_spaniel Copying: images_split/train/irish_water_spaniel/n02102973_1714.jpg to images_split/train_10_percent/irish_water_spaniel/n02102973_1714.jpg images_split/train_10_percent/english_setter Copying: images_split/train/english_setter/n02100735_7525.jpg to images_split/train_10_percent/english_setter/n02100735_7525.jpg images_split/train_10_percent/soft_coated_wheaten_terrier Making directory: images_split/train_10_percent/soft_coated_wheaten_terrier Copying: images_split/train/soft_coated_wheaten_terrier/n02098105_1066.jpg to images_split/train_10_percent/soft_coated_wheaten_terrier/n02098105_1066.jpg images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_4271.jpg to images_split/train_10_percent/komondor/n02105505_4271.jpg images_split/train_10_percent/german_shepherd Copying: images_split/train/german_shepherd/n02106662_13123.jpg to images_split/train_10_percent/german_shepherd/n02106662_13123.jpg images_split/train_10_percent/wire_haired_fox_terrier Making directory: images_split/train_10_percent/wire_haired_fox_terrier Copying: images_split/train/wire_haired_fox_terrier/n02095314_2059.jpg to images_split/train_10_percent/wire_haired_fox_terrier/n02095314_2059.jpg images_split/train_10_percent/basenji Making directory: images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_4853.jpg to images_split/train_10_percent/basenji/n02110806_4853.jpg images_split/train_10_percent/norfolk_terrier Copying: images_split/train/norfolk_terrier/n02094114_1972.jpg to images_split/train_10_percent/norfolk_terrier/n02094114_1972.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_2580.jpg to images_split/train_10_percent/basenji/n02110806_2580.jpg images_split/train_10_percent/chihuahua Copying: images_split/train/chihuahua/n02085620_574.jpg to images_split/train_10_percent/chihuahua/n02085620_574.jpg images_split/train_10_percent/golden_retriever Copying: images_split/train/golden_retriever/n02099601_846.jpg to images_split/train_10_percent/golden_retriever/n02099601_846.jpg images_split/train_10_percent/ibizan_hound Copying: images_split/train/ibizan_hound/n02091244_5943.jpg to images_split/train_10_percent/ibizan_hound/n02091244_5943.jpg images_split/train_10_percent/bouvier_des_flandres Copying: images_split/train/bouvier_des_flandres/n02106382_1365.jpg to images_split/train_10_percent/bouvier_des_flandres/n02106382_1365.jpg images_split/train_10_percent/staffordshire_bullterrier Making directory: images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_4245.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_4245.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_1597.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_1597.jpg images_split/train_10_percent/irish_setter Copying: images_split/train/irish_setter/n02100877_239.jpg to images_split/train_10_percent/irish_setter/n02100877_239.jpg images_split/train_10_percent/miniature_pinscher Copying: images_split/train/miniature_pinscher/n02107312_3238.jpg to images_split/train_10_percent/miniature_pinscher/n02107312_3238.jpg images_split/train_10_percent/bluetick Making directory: images_split/train_10_percent/bluetick Copying: images_split/train/bluetick/n02088632_747.jpg to images_split/train_10_percent/bluetick/n02088632_747.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_321.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_321.jpg images_split/train_10_percent/lhasa Making directory: images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_2607.jpg to images_split/train_10_percent/lhasa/n02098413_2607.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_7456.jpg to images_split/train_10_percent/boxer/n02108089_7456.jpg images_split/train_10_percent/vizsla Making directory: images_split/train_10_percent/vizsla Copying: images_split/train/vizsla/n02100583_2885.jpg to images_split/train_10_percent/vizsla/n02100583_2885.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_11481.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_11481.jpg images_split/train_10_percent/basset Copying: images_split/train/basset/n02088238_9701.jpg to images_split/train_10_percent/basset/n02088238_9701.jpg images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_166.jpg to images_split/train_10_percent/toy_poodle/n02113624_166.jpg images_split/train_10_percent/bernese_mountain_dog Copying: images_split/train/bernese_mountain_dog/n02107683_4016.jpg to images_split/train_10_percent/bernese_mountain_dog/n02107683_4016.jpg images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_1484.jpg to images_split/train_10_percent/kuvasz/n02104029_1484.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_10675.jpg to images_split/train_10_percent/collie/n02106030_10675.jpg images_split/train_10_percent/bouvier_des_flandres Copying: images_split/train/bouvier_des_flandres/n02106382_2676.jpg to images_split/train_10_percent/bouvier_des_flandres/n02106382_2676.jpg images_split/train_10_percent/dhole Making directory: images_split/train_10_percent/dhole Copying: images_split/train/dhole/n02115913_2412.jpg to images_split/train_10_percent/dhole/n02115913_2412.jpg images_split/train_10_percent/english_springer Copying: images_split/train/english_springer/n02102040_841.jpg to images_split/train_10_percent/english_springer/n02102040_841.jpg images_split/train_10_percent/malamute Making directory: images_split/train_10_percent/malamute Copying: images_split/train/malamute/n02110063_12326.jpg to images_split/train_10_percent/malamute/n02110063_12326.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_11635.jpg to images_split/train_10_percent/siberian_husky/n02110185_11635.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_5975.jpg to images_split/train_10_percent/standard_poodle/n02113799_5975.jpg images_split/train_10_percent/appenzeller Copying: images_split/train/appenzeller/n02107908_4891.jpg to images_split/train_10_percent/appenzeller/n02107908_4891.jpg images_split/train_10_percent/brabancon_griffon Copying: images_split/train/brabancon_griffon/n02112706_1875.jpg to images_split/train_10_percent/brabancon_griffon/n02112706_1875.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_74.jpg to images_split/train_10_percent/leonberg/n02111129_74.jpg images_split/train_10_percent/french_bulldog Making directory: images_split/train_10_percent/french_bulldog Copying: images_split/train/french_bulldog/n02108915_1895.jpg to images_split/train_10_percent/french_bulldog/n02108915_1895.jpg images_split/train_10_percent/rottweiler Copying: images_split/train/rottweiler/n02106550_1388.jpg to images_split/train_10_percent/rottweiler/n02106550_1388.jpg images_split/train_10_percent/keeshond Making directory: images_split/train_10_percent/keeshond Copying: images_split/train/keeshond/n02112350_7618.jpg to images_split/train_10_percent/keeshond/n02112350_7618.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_7434.jpg to images_split/train_10_percent/briard/n02105251_7434.jpg images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_3103.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_3103.jpg images_split/train_10_percent/miniature_poodle Copying: images_split/train/miniature_poodle/n02113712_8473.jpg to images_split/train_10_percent/miniature_poodle/n02113712_8473.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_9859.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_9859.jpg images_split/train_10_percent/soft_coated_wheaten_terrier Copying: images_split/train/soft_coated_wheaten_terrier/n02098105_4120.jpg to images_split/train_10_percent/soft_coated_wheaten_terrier/n02098105_4120.jpg images_split/train_10_percent/australian_terrier Copying: images_split/train/australian_terrier/n02096294_8476.jpg to images_split/train_10_percent/australian_terrier/n02096294_8476.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_1956.jpg to images_split/train_10_percent/boxer/n02108089_1956.jpg images_split/train_10_percent/border_terrier Copying: images_split/train/border_terrier/n02093754_6098.jpg to images_split/train_10_percent/border_terrier/n02093754_6098.jpg images_split/train_10_percent/australian_terrier Copying: images_split/train/australian_terrier/n02096294_7804.jpg to images_split/train_10_percent/australian_terrier/n02096294_7804.jpg images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_3255.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_3255.jpg images_split/train_10_percent/saluki Copying: images_split/train/saluki/n02091831_10823.jpg to images_split/train_10_percent/saluki/n02091831_10823.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_2033.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_2033.jpg images_split/train_10_percent/gordon_setter Copying: images_split/train/gordon_setter/n02101006_1249.jpg to images_split/train_10_percent/gordon_setter/n02101006_1249.jpg images_split/train_10_percent/beagle Making directory: images_split/train_10_percent/beagle Copying: images_split/train/beagle/n02088364_17314.jpg to images_split/train_10_percent/beagle/n02088364_17314.jpg images_split/train_10_percent/norfolk_terrier Copying: images_split/train/norfolk_terrier/n02094114_699.jpg to images_split/train_10_percent/norfolk_terrier/n02094114_699.jpg images_split/train_10_percent/border_terrier Copying: images_split/train/border_terrier/n02093754_4448.jpg to images_split/train_10_percent/border_terrier/n02093754_4448.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_2998.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_2998.jpg images_split/train_10_percent/maltese_dog Copying: images_split/train/maltese_dog/n02085936_8756.jpg to images_split/train_10_percent/maltese_dog/n02085936_8756.jpg images_split/train_10_percent/yorkshire_terrier Making directory: images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_1770.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_1770.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_2290.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_2290.jpg images_split/train_10_percent/french_bulldog Copying: images_split/train/french_bulldog/n02108915_11653.jpg to images_split/train_10_percent/french_bulldog/n02108915_11653.jpg images_split/train_10_percent/dingo Copying: images_split/train/dingo/n02115641_10021.jpg to images_split/train_10_percent/dingo/n02115641_10021.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_13442.jpg to images_split/train_10_percent/afghan_hound/n02088094_13442.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_2354.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_2354.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_5936.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_5936.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_6334.jpg to images_split/train_10_percent/weimaraner/n02092339_6334.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_17418.jpg to images_split/train_10_percent/collie/n02106030_17418.jpg images_split/train_10_percent/bluetick Copying: images_split/train/bluetick/n02088632_3749.jpg to images_split/train_10_percent/bluetick/n02088632_3749.jpg images_split/train_10_percent/otterhound Copying: images_split/train/otterhound/n02091635_3479.jpg to images_split/train_10_percent/otterhound/n02091635_3479.jpg images_split/train_10_percent/affenpinscher Making directory: images_split/train_10_percent/affenpinscher Copying: images_split/train/affenpinscher/n02110627_8250.jpg to images_split/train_10_percent/affenpinscher/n02110627_8250.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_2628.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_2628.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_8468.jpg to images_split/train_10_percent/lhasa/n02098413_8468.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_4012.jpg to images_split/train_10_percent/basenji/n02110806_4012.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_10285.jpg to images_split/train_10_percent/lhasa/n02098413_10285.jpg images_split/train_10_percent/toy_terrier Making directory: images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_7191.jpg to images_split/train_10_percent/toy_terrier/n02087046_7191.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_1510.jpg to images_split/train_10_percent/norwich_terrier/n02094258_1510.jpg images_split/train_10_percent/blenheim_spaniel Copying: images_split/train/blenheim_spaniel/n02086646_1447.jpg to images_split/train_10_percent/blenheim_spaniel/n02086646_1447.jpg images_split/train_10_percent/blenheim_spaniel Copying: images_split/train/blenheim_spaniel/n02086646_637.jpg to images_split/train_10_percent/blenheim_spaniel/n02086646_637.jpg images_split/train_10_percent/giant_schnauzer Copying: images_split/train/giant_schnauzer/n02097130_1197.jpg to images_split/train_10_percent/giant_schnauzer/n02097130_1197.jpg images_split/train_10_percent/samoyed Copying: images_split/train/samoyed/n02111889_12811.jpg to images_split/train_10_percent/samoyed/n02111889_12811.jpg images_split/train_10_percent/walker_hound Copying: images_split/train/walker_hound/n02089867_3260.jpg to images_split/train_10_percent/walker_hound/n02089867_3260.jpg images_split/train_10_percent/bernese_mountain_dog Copying: images_split/train/bernese_mountain_dog/n02107683_5684.jpg to images_split/train_10_percent/bernese_mountain_dog/n02107683_5684.jpg images_split/train_10_percent/boston_bull Making directory: images_split/train_10_percent/boston_bull Copying: images_split/train/boston_bull/n02096585_10380.jpg to images_split/train_10_percent/boston_bull/n02096585_10380.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_2630.jpg to images_split/train_10_percent/great_dane/n02109047_2630.jpg images_split/train_10_percent/bouvier_des_flandres Copying: images_split/train/bouvier_des_flandres/n02106382_2322.jpg to images_split/train_10_percent/bouvier_des_flandres/n02106382_2322.jpg images_split/train_10_percent/labrador_retriever Making directory: images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_2228.jpg to images_split/train_10_percent/labrador_retriever/n02099712_2228.jpg images_split/train_10_percent/appenzeller Copying: images_split/train/appenzeller/n02107908_2899.jpg to images_split/train_10_percent/appenzeller/n02107908_2899.jpg images_split/train_10_percent/giant_schnauzer Copying: images_split/train/giant_schnauzer/n02097130_4888.jpg to images_split/train_10_percent/giant_schnauzer/n02097130_4888.jpg images_split/train_10_percent/sealyham_terrier Copying: images_split/train/sealyham_terrier/n02095889_3497.jpg to images_split/train_10_percent/sealyham_terrier/n02095889_3497.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_305.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_305.jpg images_split/train_10_percent/norfolk_terrier Copying: images_split/train/norfolk_terrier/n02094114_2158.jpg to images_split/train_10_percent/norfolk_terrier/n02094114_2158.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_3098.jpg to images_split/train_10_percent/standard_poodle/n02113799_3098.jpg images_split/train_10_percent/bouvier_des_flandres Copying: images_split/train/bouvier_des_flandres/n02106382_2083.jpg to images_split/train_10_percent/bouvier_des_flandres/n02106382_2083.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_1517.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_1517.jpg images_split/train_10_percent/bedlington_terrier Copying: images_split/train/bedlington_terrier/n02093647_55.jpg to images_split/train_10_percent/bedlington_terrier/n02093647_55.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_7977.jpg to images_split/train_10_percent/briard/n02105251_7977.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_1918.jpg to images_split/train_10_percent/norwich_terrier/n02094258_1918.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_3435.jpg to images_split/train_10_percent/norwich_terrier/n02094258_3435.jpg images_split/train_10_percent/irish_setter Copying: images_split/train/irish_setter/n02100877_8800.jpg to images_split/train_10_percent/irish_setter/n02100877_8800.jpg images_split/train_10_percent/rottweiler Copying: images_split/train/rottweiler/n02106550_7616.jpg to images_split/train_10_percent/rottweiler/n02106550_7616.jpg images_split/train_10_percent/malinois Copying: images_split/train/malinois/n02105162_4056.jpg to images_split/train_10_percent/malinois/n02105162_4056.jpg images_split/train_10_percent/curly_coated_retriever Making directory: images_split/train_10_percent/curly_coated_retriever Copying: images_split/train/curly_coated_retriever/n02099429_3029.jpg to images_split/train_10_percent/curly_coated_retriever/n02099429_3029.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_1907.jpg to images_split/train_10_percent/afghan_hound/n02088094_1907.jpg images_split/train_10_percent/pomeranian Copying: images_split/train/pomeranian/n02112018_11105.jpg to images_split/train_10_percent/pomeranian/n02112018_11105.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_5641.jpg to images_split/train_10_percent/briard/n02105251_5641.jpg images_split/train_10_percent/golden_retriever Copying: images_split/train/golden_retriever/n02099601_1442.jpg to images_split/train_10_percent/golden_retriever/n02099601_1442.jpg images_split/train_10_percent/entlebucher Making directory: images_split/train_10_percent/entlebucher Copying: images_split/train/entlebucher/n02108000_1714.jpg to images_split/train_10_percent/entlebucher/n02108000_1714.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_1367.jpg to images_split/train_10_percent/boxer/n02108089_1367.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_983.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_983.jpg images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_8014.jpg to images_split/train_10_percent/labrador_retriever/n02099712_8014.jpg images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_737.jpg to images_split/train_10_percent/mexican_hairless/n02113978_737.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_18685.jpg to images_split/train_10_percent/collie/n02106030_18685.jpg images_split/train_10_percent/saint_bernard Making directory: images_split/train_10_percent/saint_bernard Copying: images_split/train/saint_bernard/n02109525_9869.jpg to images_split/train_10_percent/saint_bernard/n02109525_9869.jpg images_split/train_10_percent/blenheim_spaniel Copying: images_split/train/blenheim_spaniel/n02086646_2815.jpg to images_split/train_10_percent/blenheim_spaniel/n02086646_2815.jpg images_split/train_10_percent/dingo Copying: images_split/train/dingo/n02115641_3360.jpg to images_split/train_10_percent/dingo/n02115641_3360.jpg images_split/train_10_percent/vizsla Copying: images_split/train/vizsla/n02100583_5792.jpg to images_split/train_10_percent/vizsla/n02100583_5792.jpg images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_4506.jpg to images_split/train_10_percent/toy_terrier/n02087046_4506.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_2405.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_2405.jpg images_split/train_10_percent/great_pyrenees Making directory: images_split/train_10_percent/great_pyrenees Copying: images_split/train/great_pyrenees/n02111500_337.jpg to images_split/train_10_percent/great_pyrenees/n02111500_337.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_6209.jpg to images_split/train_10_percent/weimaraner/n02092339_6209.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_6715.jpg to images_split/train_10_percent/standard_poodle/n02113799_6715.jpg images_split/train_10_percent/norfolk_terrier Copying: images_split/train/norfolk_terrier/n02094114_4165.jpg to images_split/train_10_percent/norfolk_terrier/n02094114_4165.jpg images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_3140.jpg to images_split/train_10_percent/papillon/n02086910_3140.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_13957.jpg to images_split/train_10_percent/whippet/n02091134_13957.jpg images_split/train_10_percent/black_and_tan_coonhound Copying: images_split/train/black_and_tan_coonhound/n02089078_3914.jpg to images_split/train_10_percent/black_and_tan_coonhound/n02089078_3914.jpg images_split/train_10_percent/schipperke Copying: images_split/train/schipperke/n02104365_10139.jpg to images_split/train_10_percent/schipperke/n02104365_10139.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_11141.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_11141.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_9517.jpg to images_split/train_10_percent/italian_greyhound/n02091032_9517.jpg images_split/train_10_percent/chow Making directory: images_split/train_10_percent/chow Copying: images_split/train/chow/n02112137_16520.jpg to images_split/train_10_percent/chow/n02112137_16520.jpg images_split/train_10_percent/bernese_mountain_dog Copying: images_split/train/bernese_mountain_dog/n02107683_1747.jpg to images_split/train_10_percent/bernese_mountain_dog/n02107683_1747.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_2497.jpg to images_split/train_10_percent/english_foxhound/n02089973_2497.jpg images_split/train_10_percent/bouvier_des_flandres Copying: images_split/train/bouvier_des_flandres/n02106382_4034.jpg to images_split/train_10_percent/bouvier_des_flandres/n02106382_4034.jpg images_split/train_10_percent/african_hunting_dog Copying: images_split/train/african_hunting_dog/n02116738_9769.jpg to images_split/train_10_percent/african_hunting_dog/n02116738_9769.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_626.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_626.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_237.jpg to images_split/train_10_percent/silky_terrier/n02097658_237.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_8541.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_8541.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_8543.jpg to images_split/train_10_percent/borzoi/n02090622_8543.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_2116.jpg to images_split/train_10_percent/norwich_terrier/n02094258_2116.jpg images_split/train_10_percent/standard_schnauzer Copying: images_split/train/standard_schnauzer/n02097209_3811.jpg to images_split/train_10_percent/standard_schnauzer/n02097209_3811.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_1856.jpg to images_split/train_10_percent/weimaraner/n02092339_1856.jpg images_split/train_10_percent/norfolk_terrier Copying: images_split/train/norfolk_terrier/n02094114_1944.jpg to images_split/train_10_percent/norfolk_terrier/n02094114_1944.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_1643.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_1643.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_15388.jpg to images_split/train_10_percent/collie/n02106030_15388.jpg images_split/train_10_percent/norfolk_terrier Copying: images_split/train/norfolk_terrier/n02094114_4518.jpg to images_split/train_10_percent/norfolk_terrier/n02094114_4518.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_3039.jpg to images_split/train_10_percent/siberian_husky/n02110185_3039.jpg images_split/train_10_percent/norfolk_terrier Copying: images_split/train/norfolk_terrier/n02094114_3458.jpg to images_split/train_10_percent/norfolk_terrier/n02094114_3458.jpg images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_7968.jpg to images_split/train_10_percent/labrador_retriever/n02099712_7968.jpg images_split/train_10_percent/irish_wolfhound Copying: images_split/train/irish_wolfhound/n02090721_1650.jpg to images_split/train_10_percent/irish_wolfhound/n02090721_1650.jpg images_split/train_10_percent/great_pyrenees Copying: images_split/train/great_pyrenees/n02111500_6338.jpg to images_split/train_10_percent/great_pyrenees/n02111500_6338.jpg images_split/train_10_percent/border_collie Copying: images_split/train/border_collie/n02106166_243.jpg to images_split/train_10_percent/border_collie/n02106166_243.jpg images_split/train_10_percent/irish_setter Copying: images_split/train/irish_setter/n02100877_3056.jpg to images_split/train_10_percent/irish_setter/n02100877_3056.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_7307.jpg to images_split/train_10_percent/borzoi/n02090622_7307.jpg images_split/train_10_percent/norfolk_terrier Copying: images_split/train/norfolk_terrier/n02094114_99.jpg to images_split/train_10_percent/norfolk_terrier/n02094114_99.jpg images_split/train_10_percent/sussex_spaniel Copying: images_split/train/sussex_spaniel/n02102480_4217.jpg to images_split/train_10_percent/sussex_spaniel/n02102480_4217.jpg images_split/train_10_percent/japanese_spaniel Copying: images_split/train/japanese_spaniel/n02085782_230.jpg to images_split/train_10_percent/japanese_spaniel/n02085782_230.jpg images_split/train_10_percent/curly_coated_retriever Copying: images_split/train/curly_coated_retriever/n02099429_3396.jpg to images_split/train_10_percent/curly_coated_retriever/n02099429_3396.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_1132.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_1132.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_5005.jpg to images_split/train_10_percent/redbone/n02090379_5005.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_1817.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_1817.jpg images_split/train_10_percent/appenzeller Copying: images_split/train/appenzeller/n02107908_2723.jpg to images_split/train_10_percent/appenzeller/n02107908_2723.jpg images_split/train_10_percent/dingo Copying: images_split/train/dingo/n02115641_9977.jpg to images_split/train_10_percent/dingo/n02115641_9977.jpg images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_2551.jpg to images_split/train_10_percent/toy_terrier/n02087046_2551.jpg images_split/train_10_percent/keeshond Copying: images_split/train/keeshond/n02112350_8391.jpg to images_split/train_10_percent/keeshond/n02112350_8391.jpg images_split/train_10_percent/affenpinscher Copying: images_split/train/affenpinscher/n02110627_10986.jpg to images_split/train_10_percent/affenpinscher/n02110627_10986.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_6376.jpg to images_split/train_10_percent/briard/n02105251_6376.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_3947.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_3947.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_3109.jpg to images_split/train_10_percent/redbone/n02090379_3109.jpg images_split/train_10_percent/irish_terrier Making directory: images_split/train_10_percent/irish_terrier Copying: images_split/train/irish_terrier/n02093991_4589.jpg to images_split/train_10_percent/irish_terrier/n02093991_4589.jpg images_split/train_10_percent/airedale Copying: images_split/train/airedale/n02096051_9391.jpg to images_split/train_10_percent/airedale/n02096051_9391.jpg images_split/train_10_percent/japanese_spaniel Copying: images_split/train/japanese_spaniel/n02085782_4772.jpg to images_split/train_10_percent/japanese_spaniel/n02085782_4772.jpg images_split/train_10_percent/bull_mastiff Copying: images_split/train/bull_mastiff/n02108422_4898.jpg to images_split/train_10_percent/bull_mastiff/n02108422_4898.jpg images_split/train_10_percent/giant_schnauzer Copying: images_split/train/giant_schnauzer/n02097130_4740.jpg to images_split/train_10_percent/giant_schnauzer/n02097130_4740.jpg images_split/train_10_percent/irish_wolfhound Copying: images_split/train/irish_wolfhound/n02090721_1222.jpg to images_split/train_10_percent/irish_wolfhound/n02090721_1222.jpg images_split/train_10_percent/chihuahua Copying: images_split/train/chihuahua/n02085620_7.jpg to images_split/train_10_percent/chihuahua/n02085620_7.jpg images_split/train_10_percent/chesapeake_bay_retriever Making directory: images_split/train_10_percent/chesapeake_bay_retriever Copying: images_split/train/chesapeake_bay_retriever/n02099849_4457.jpg to images_split/train_10_percent/chesapeake_bay_retriever/n02099849_4457.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_8216.jpg to images_split/train_10_percent/siberian_husky/n02110185_8216.jpg images_split/train_10_percent/rhodesian_ridgeback Making directory: images_split/train_10_percent/rhodesian_ridgeback Copying: images_split/train/rhodesian_ridgeback/n02087394_760.jpg to images_split/train_10_percent/rhodesian_ridgeback/n02087394_760.jpg images_split/train_10_percent/doberman Making directory: images_split/train_10_percent/doberman Copying: images_split/train/doberman/n02107142_8834.jpg to images_split/train_10_percent/doberman/n02107142_8834.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_1752.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_1752.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_2182.jpg to images_split/train_10_percent/silky_terrier/n02097658_2182.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_10902.jpg to images_split/train_10_percent/siberian_husky/n02110185_10902.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_1396.jpg to images_split/train_10_percent/basenji/n02110806_1396.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_10020.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_10020.jpg images_split/train_10_percent/old_english_sheepdog Copying: images_split/train/old_english_sheepdog/n02105641_5998.jpg to images_split/train_10_percent/old_english_sheepdog/n02105641_5998.jpg images_split/train_10_percent/bluetick Copying: images_split/train/bluetick/n02088632_2965.jpg to images_split/train_10_percent/bluetick/n02088632_2965.jpg images_split/train_10_percent/sealyham_terrier Copying: images_split/train/sealyham_terrier/n02095889_5528.jpg to images_split/train_10_percent/sealyham_terrier/n02095889_5528.jpg images_split/train_10_percent/kerry_blue_terrier Making directory: images_split/train_10_percent/kerry_blue_terrier Copying: images_split/train/kerry_blue_terrier/n02093859_2055.jpg to images_split/train_10_percent/kerry_blue_terrier/n02093859_2055.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_5.jpg to images_split/train_10_percent/italian_greyhound/n02091032_5.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_4694.jpg to images_split/train_10_percent/siberian_husky/n02110185_4694.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_3113.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_3113.jpg images_split/train_10_percent/saluki Copying: images_split/train/saluki/n02091831_1730.jpg to images_split/train_10_percent/saluki/n02091831_1730.jpg images_split/train_10_percent/pomeranian Copying: images_split/train/pomeranian/n02112018_14394.jpg to images_split/train_10_percent/pomeranian/n02112018_14394.jpg images_split/train_10_percent/airedale Copying: images_split/train/airedale/n02096051_2432.jpg to images_split/train_10_percent/airedale/n02096051_2432.jpg images_split/train_10_percent/chihuahua Copying: images_split/train/chihuahua/n02085620_1916.jpg to images_split/train_10_percent/chihuahua/n02085620_1916.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_4230.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_4230.jpg images_split/train_10_percent/golden_retriever Copying: images_split/train/golden_retriever/n02099601_176.jpg to images_split/train_10_percent/golden_retriever/n02099601_176.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_16095.jpg to images_split/train_10_percent/collie/n02106030_16095.jpg images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_3900.jpg to images_split/train_10_percent/kuvasz/n02104029_3900.jpg images_split/train_10_percent/border_collie Copying: images_split/train/border_collie/n02106166_3416.jpg to images_split/train_10_percent/border_collie/n02106166_3416.jpg images_split/train_10_percent/bluetick Copying: images_split/train/bluetick/n02088632_4613.jpg to images_split/train_10_percent/bluetick/n02088632_4613.jpg images_split/train_10_percent/groenendael Making directory: images_split/train_10_percent/groenendael Copying: images_split/train/groenendael/n02105056_2194.jpg to images_split/train_10_percent/groenendael/n02105056_2194.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_2283.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_2283.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_8560.jpg to images_split/train_10_percent/briard/n02105251_8560.jpg images_split/train_10_percent/norwegian_elkhound Copying: images_split/train/norwegian_elkhound/n02091467_7351.jpg to images_split/train_10_percent/norwegian_elkhound/n02091467_7351.jpg images_split/train_10_percent/chow Copying: images_split/train/chow/n02112137_9591.jpg to images_split/train_10_percent/chow/n02112137_9591.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_6713.jpg to images_split/train_10_percent/borzoi/n02090622_6713.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_306.jpg to images_split/train_10_percent/leonberg/n02111129_306.jpg images_split/train_10_percent/miniature_schnauzer Copying: images_split/train/miniature_schnauzer/n02097047_1418.jpg to images_split/train_10_percent/miniature_schnauzer/n02097047_1418.jpg images_split/train_10_percent/gordon_setter Copying: images_split/train/gordon_setter/n02101006_1506.jpg to images_split/train_10_percent/gordon_setter/n02101006_1506.jpg images_split/train_10_percent/kerry_blue_terrier Copying: images_split/train/kerry_blue_terrier/n02093859_276.jpg to images_split/train_10_percent/kerry_blue_terrier/n02093859_276.jpg images_split/train_10_percent/scotch_terrier Making directory: images_split/train_10_percent/scotch_terrier Copying: images_split/train/scotch_terrier/n02097298_6383.jpg to images_split/train_10_percent/scotch_terrier/n02097298_6383.jpg images_split/train_10_percent/giant_schnauzer Copying: images_split/train/giant_schnauzer/n02097130_5708.jpg to images_split/train_10_percent/giant_schnauzer/n02097130_5708.jpg images_split/train_10_percent/basset Copying: images_split/train/basset/n02088238_13608.jpg to images_split/train_10_percent/basset/n02088238_13608.jpg images_split/train_10_percent/saluki Copying: images_split/train/saluki/n02091831_1594.jpg to images_split/train_10_percent/saluki/n02091831_1594.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_4650.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_4650.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_836.jpg to images_split/train_10_percent/boxer/n02108089_836.jpg images_split/train_10_percent/kerry_blue_terrier Copying: images_split/train/kerry_blue_terrier/n02093859_1598.jpg to images_split/train_10_percent/kerry_blue_terrier/n02093859_1598.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_5829.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_5829.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_6735.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_6735.jpg images_split/train_10_percent/malinois Copying: images_split/train/malinois/n02105162_5330.jpg to images_split/train_10_percent/malinois/n02105162_5330.jpg images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_3558.jpg to images_split/train_10_percent/komondor/n02105505_3558.jpg images_split/train_10_percent/bedlington_terrier Copying: images_split/train/bedlington_terrier/n02093647_1980.jpg to images_split/train_10_percent/bedlington_terrier/n02093647_1980.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_7677.jpg to images_split/train_10_percent/borzoi/n02090622_7677.jpg images_split/train_10_percent/pekinese Copying: images_split/train/pekinese/n02086079_5125.jpg to images_split/train_10_percent/pekinese/n02086079_5125.jpg images_split/train_10_percent/chow Copying: images_split/train/chow/n02112137_13499.jpg to images_split/train_10_percent/chow/n02112137_13499.jpg images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_1293.jpg to images_split/train_10_percent/toy_poodle/n02113624_1293.jpg images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_371.jpg to images_split/train_10_percent/kuvasz/n02104029_371.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_329.jpg to images_split/train_10_percent/silky_terrier/n02097658_329.jpg images_split/train_10_percent/german_short_haired_pointer Copying: images_split/train/german_short_haired_pointer/n02100236_396.jpg to images_split/train_10_percent/german_short_haired_pointer/n02100236_396.jpg images_split/train_10_percent/doberman Copying: images_split/train/doberman/n02107142_4255.jpg to images_split/train_10_percent/doberman/n02107142_4255.jpg images_split/train_10_percent/tibetan_terrier Copying: images_split/train/tibetan_terrier/n02097474_2553.jpg to images_split/train_10_percent/tibetan_terrier/n02097474_2553.jpg images_split/train_10_percent/beagle Copying: images_split/train/beagle/n02088364_11930.jpg to images_split/train_10_percent/beagle/n02088364_11930.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_8518.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_8518.jpg images_split/train_10_percent/border_collie Copying: images_split/train/border_collie/n02106166_4966.jpg to images_split/train_10_percent/border_collie/n02106166_4966.jpg images_split/train_10_percent/english_setter Copying: images_split/train/english_setter/n02100735_4870.jpg to images_split/train_10_percent/english_setter/n02100735_4870.jpg images_split/train_10_percent/kelpie Copying: images_split/train/kelpie/n02105412_2333.jpg to images_split/train_10_percent/kelpie/n02105412_2333.jpg images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_1436.jpg to images_split/train_10_percent/labrador_retriever/n02099712_1436.jpg images_split/train_10_percent/blenheim_spaniel Copying: images_split/train/blenheim_spaniel/n02086646_3629.jpg to images_split/train_10_percent/blenheim_spaniel/n02086646_3629.jpg images_split/train_10_percent/beagle Copying: images_split/train/beagle/n02088364_14095.jpg to images_split/train_10_percent/beagle/n02088364_14095.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_1335.jpg to images_split/train_10_percent/afghan_hound/n02088094_1335.jpg images_split/train_10_percent/bloodhound Copying: images_split/train/bloodhound/n02088466_10724.jpg to images_split/train_10_percent/bloodhound/n02088466_10724.jpg images_split/train_10_percent/black_and_tan_coonhound Copying: images_split/train/black_and_tan_coonhound/n02089078_1842.jpg to images_split/train_10_percent/black_and_tan_coonhound/n02089078_1842.jpg images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_795.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_795.jpg images_split/train_10_percent/bluetick Copying: images_split/train/bluetick/n02088632_87.jpg to images_split/train_10_percent/bluetick/n02088632_87.jpg images_split/train_10_percent/clumber Copying: images_split/train/clumber/n02101556_2003.jpg to images_split/train_10_percent/clumber/n02101556_2003.jpg images_split/train_10_percent/rhodesian_ridgeback Copying: images_split/train/rhodesian_ridgeback/n02087394_8260.jpg to images_split/train_10_percent/rhodesian_ridgeback/n02087394_8260.jpg images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_881.jpg to images_split/train_10_percent/papillon/n02086910_881.jpg images_split/train_10_percent/entlebucher Copying: images_split/train/entlebucher/n02108000_3104.jpg to images_split/train_10_percent/entlebucher/n02108000_3104.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_2106.jpg to images_split/train_10_percent/boxer/n02108089_2106.jpg images_split/train_10_percent/gordon_setter Copying: images_split/train/gordon_setter/n02101006_1160.jpg to images_split/train_10_percent/gordon_setter/n02101006_1160.jpg images_split/train_10_percent/samoyed Copying: images_split/train/samoyed/n02111889_16414.jpg to images_split/train_10_percent/samoyed/n02111889_16414.jpg images_split/train_10_percent/african_hunting_dog Copying: images_split/train/african_hunting_dog/n02116738_4019.jpg to images_split/train_10_percent/african_hunting_dog/n02116738_4019.jpg images_split/train_10_percent/saluki Copying: images_split/train/saluki/n02091831_13774.jpg to images_split/train_10_percent/saluki/n02091831_13774.jpg images_split/train_10_percent/golden_retriever Copying: images_split/train/golden_retriever/n02099601_816.jpg to images_split/train_10_percent/golden_retriever/n02099601_816.jpg images_split/train_10_percent/dhole Copying: images_split/train/dhole/n02115913_1578.jpg to images_split/train_10_percent/dhole/n02115913_1578.jpg images_split/train_10_percent/pug Making directory: images_split/train_10_percent/pug Copying: images_split/train/pug/n02110958_16217.jpg to images_split/train_10_percent/pug/n02110958_16217.jpg images_split/train_10_percent/miniature_schnauzer Copying: images_split/train/miniature_schnauzer/n02097047_6701.jpg to images_split/train_10_percent/miniature_schnauzer/n02097047_6701.jpg images_split/train_10_percent/maltese_dog Copying: images_split/train/maltese_dog/n02085936_7394.jpg to images_split/train_10_percent/maltese_dog/n02085936_7394.jpg images_split/train_10_percent/norwegian_elkhound Copying: images_split/train/norwegian_elkhound/n02091467_4827.jpg to images_split/train_10_percent/norwegian_elkhound/n02091467_4827.jpg images_split/train_10_percent/irish_wolfhound Copying: images_split/train/irish_wolfhound/n02090721_1131.jpg to images_split/train_10_percent/irish_wolfhound/n02090721_1131.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_4730.jpg to images_split/train_10_percent/boxer/n02108089_4730.jpg images_split/train_10_percent/pug Copying: images_split/train/pug/n02110958_13930.jpg to images_split/train_10_percent/pug/n02110958_13930.jpg images_split/train_10_percent/samoyed Copying: images_split/train/samoyed/n02111889_373.jpg to images_split/train_10_percent/samoyed/n02111889_373.jpg images_split/train_10_percent/miniature_pinscher Copying: images_split/train/miniature_pinscher/n02107312_5077.jpg to images_split/train_10_percent/miniature_pinscher/n02107312_5077.jpg images_split/train_10_percent/irish_terrier Copying: images_split/train/irish_terrier/n02093991_4872.jpg to images_split/train_10_percent/irish_terrier/n02093991_4872.jpg images_split/train_10_percent/wire_haired_fox_terrier Copying: images_split/train/wire_haired_fox_terrier/n02095314_2964.jpg to images_split/train_10_percent/wire_haired_fox_terrier/n02095314_2964.jpg images_split/train_10_percent/german_shepherd Copying: images_split/train/german_shepherd/n02106662_6931.jpg to images_split/train_10_percent/german_shepherd/n02106662_6931.jpg images_split/train_10_percent/irish_terrier Copying: images_split/train/irish_terrier/n02093991_1142.jpg to images_split/train_10_percent/irish_terrier/n02093991_1142.jpg images_split/train_10_percent/walker_hound Copying: images_split/train/walker_hound/n02089867_1368.jpg to images_split/train_10_percent/walker_hound/n02089867_1368.jpg images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_1816.jpg to images_split/train_10_percent/kuvasz/n02104029_1816.jpg images_split/train_10_percent/tibetan_mastiff Copying: images_split/train/tibetan_mastiff/n02108551_340.jpg to images_split/train_10_percent/tibetan_mastiff/n02108551_340.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_6300.jpg to images_split/train_10_percent/briard/n02105251_6300.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_3777.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_3777.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_4218.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_4218.jpg images_split/train_10_percent/groenendael Copying: images_split/train/groenendael/n02105056_3107.jpg to images_split/train_10_percent/groenendael/n02105056_3107.jpg images_split/train_10_percent/african_hunting_dog Copying: images_split/train/african_hunting_dog/n02116738_5953.jpg to images_split/train_10_percent/african_hunting_dog/n02116738_5953.jpg images_split/train_10_percent/airedale Copying: images_split/train/airedale/n02096051_183.jpg to images_split/train_10_percent/airedale/n02096051_183.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_2337.jpg to images_split/train_10_percent/borzoi/n02090622_2337.jpg images_split/train_10_percent/dingo Copying: images_split/train/dingo/n02115641_925.jpg to images_split/train_10_percent/dingo/n02115641_925.jpg images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_3455.jpg to images_split/train_10_percent/papillon/n02086910_3455.jpg images_split/train_10_percent/cardigan Copying: images_split/train/cardigan/n02113186_7676.jpg to images_split/train_10_percent/cardigan/n02113186_7676.jpg images_split/train_10_percent/boston_bull Copying: images_split/train/boston_bull/n02096585_1753.jpg to images_split/train_10_percent/boston_bull/n02096585_1753.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_1470.jpg to images_split/train_10_percent/newfoundland/n02111277_1470.jpg images_split/train_10_percent/cardigan Copying: images_split/train/cardigan/n02113186_7215.jpg to images_split/train_10_percent/cardigan/n02113186_7215.jpg images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_745.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_745.jpg images_split/train_10_percent/boston_bull Copying: images_split/train/boston_bull/n02096585_942.jpg to images_split/train_10_percent/boston_bull/n02096585_942.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_4436.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_4436.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_8854.jpg to images_split/train_10_percent/briard/n02105251_8854.jpg images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_1449.jpg to images_split/train_10_percent/papillon/n02086910_1449.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_382.jpg to images_split/train_10_percent/english_foxhound/n02089973_382.jpg images_split/train_10_percent/bedlington_terrier Copying: images_split/train/bedlington_terrier/n02093647_680.jpg to images_split/train_10_percent/bedlington_terrier/n02093647_680.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_2339.jpg to images_split/train_10_percent/whippet/n02091134_2339.jpg images_split/train_10_percent/irish_terrier Copying: images_split/train/irish_terrier/n02093991_3403.jpg to images_split/train_10_percent/irish_terrier/n02093991_3403.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_20774.jpg to images_split/train_10_percent/lhasa/n02098413_20774.jpg images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_2039.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_2039.jpg images_split/train_10_percent/english_springer Copying: images_split/train/english_springer/n02102040_7596.jpg to images_split/train_10_percent/english_springer/n02102040_7596.jpg images_split/train_10_percent/pomeranian Copying: images_split/train/pomeranian/n02112018_3504.jpg to images_split/train_10_percent/pomeranian/n02112018_3504.jpg images_split/train_10_percent/groenendael Copying: images_split/train/groenendael/n02105056_6474.jpg to images_split/train_10_percent/groenendael/n02105056_6474.jpg images_split/train_10_percent/wire_haired_fox_terrier Copying: images_split/train/wire_haired_fox_terrier/n02095314_663.jpg to images_split/train_10_percent/wire_haired_fox_terrier/n02095314_663.jpg images_split/train_10_percent/border_terrier Copying: images_split/train/border_terrier/n02093754_1722.jpg to images_split/train_10_percent/border_terrier/n02093754_1722.jpg images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_1963.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_1963.jpg images_split/train_10_percent/soft_coated_wheaten_terrier Copying: images_split/train/soft_coated_wheaten_terrier/n02098105_2897.jpg to images_split/train_10_percent/soft_coated_wheaten_terrier/n02098105_2897.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_437.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_437.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_3036.jpg to images_split/train_10_percent/norwich_terrier/n02094258_3036.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_6634.jpg to images_split/train_10_percent/standard_poodle/n02113799_6634.jpg images_split/train_10_percent/irish_water_spaniel Copying: images_split/train/irish_water_spaniel/n02102973_3326.jpg to images_split/train_10_percent/irish_water_spaniel/n02102973_3326.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_7683.jpg to images_split/train_10_percent/afghan_hound/n02088094_7683.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_835.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_835.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_4598.jpg to images_split/train_10_percent/afghan_hound/n02088094_4598.jpg images_split/train_10_percent/groenendael Copying: images_split/train/groenendael/n02105056_4640.jpg to images_split/train_10_percent/groenendael/n02105056_4640.jpg images_split/train_10_percent/sealyham_terrier Copying: images_split/train/sealyham_terrier/n02095889_2927.jpg to images_split/train_10_percent/sealyham_terrier/n02095889_2927.jpg images_split/train_10_percent/sussex_spaniel Copying: images_split/train/sussex_spaniel/n02102480_3762.jpg to images_split/train_10_percent/sussex_spaniel/n02102480_3762.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_253.jpg to images_split/train_10_percent/standard_poodle/n02113799_253.jpg images_split/train_10_percent/tibetan_mastiff Copying: images_split/train/tibetan_mastiff/n02108551_4379.jpg to images_split/train_10_percent/tibetan_mastiff/n02108551_4379.jpg images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_1765.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_1765.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_3990.jpg to images_split/train_10_percent/newfoundland/n02111277_3990.jpg images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_4069.jpg to images_split/train_10_percent/komondor/n02105505_4069.jpg images_split/train_10_percent/rhodesian_ridgeback Copying: images_split/train/rhodesian_ridgeback/n02087394_3458.jpg to images_split/train_10_percent/rhodesian_ridgeback/n02087394_3458.jpg images_split/train_10_percent/cardigan Copying: images_split/train/cardigan/n02113186_9809.jpg to images_split/train_10_percent/cardigan/n02113186_9809.jpg images_split/train_10_percent/irish_wolfhound Copying: images_split/train/irish_wolfhound/n02090721_2319.jpg to images_split/train_10_percent/irish_wolfhound/n02090721_2319.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_10179.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_10179.jpg images_split/train_10_percent/irish_terrier Copying: images_split/train/irish_terrier/n02093991_3807.jpg to images_split/train_10_percent/irish_terrier/n02093991_3807.jpg images_split/train_10_percent/bedlington_terrier Copying: images_split/train/bedlington_terrier/n02093647_518.jpg to images_split/train_10_percent/bedlington_terrier/n02093647_518.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_3300.jpg to images_split/train_10_percent/redbone/n02090379_3300.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_1583.jpg to images_split/train_10_percent/leonberg/n02111129_1583.jpg images_split/train_10_percent/german_short_haired_pointer Copying: images_split/train/german_short_haired_pointer/n02100236_3877.jpg to images_split/train_10_percent/german_short_haired_pointer/n02100236_3877.jpg images_split/train_10_percent/bouvier_des_flandres Copying: images_split/train/bouvier_des_flandres/n02106382_4504.jpg to images_split/train_10_percent/bouvier_des_flandres/n02106382_4504.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_10171.jpg to images_split/train_10_percent/siberian_husky/n02110185_10171.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_513.jpg to images_split/train_10_percent/leonberg/n02111129_513.jpg images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_2308.jpg to images_split/train_10_percent/toy_poodle/n02113624_2308.jpg images_split/train_10_percent/sussex_spaniel Copying: images_split/train/sussex_spaniel/n02102480_5805.jpg to images_split/train_10_percent/sussex_spaniel/n02102480_5805.jpg images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_3898.jpg to images_split/train_10_percent/komondor/n02105505_3898.jpg images_split/train_10_percent/schipperke Copying: images_split/train/schipperke/n02104365_5740.jpg to images_split/train_10_percent/schipperke/n02104365_5740.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_1128.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_1128.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_969.jpg to images_split/train_10_percent/norwich_terrier/n02094258_969.jpg images_split/train_10_percent/kelpie Copying: images_split/train/kelpie/n02105412_5395.jpg to images_split/train_10_percent/kelpie/n02105412_5395.jpg images_split/train_10_percent/bloodhound Copying: images_split/train/bloodhound/n02088466_1015.jpg to images_split/train_10_percent/bloodhound/n02088466_1015.jpg images_split/train_10_percent/malamute Copying: images_split/train/malamute/n02110063_12269.jpg to images_split/train_10_percent/malamute/n02110063_12269.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_2301.jpg to images_split/train_10_percent/leonberg/n02111129_2301.jpg images_split/train_10_percent/black_and_tan_coonhound Copying: images_split/train/black_and_tan_coonhound/n02089078_965.jpg to images_split/train_10_percent/black_and_tan_coonhound/n02089078_965.jpg images_split/train_10_percent/chesapeake_bay_retriever Copying: images_split/train/chesapeake_bay_retriever/n02099849_1645.jpg to images_split/train_10_percent/chesapeake_bay_retriever/n02099849_1645.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_1005.jpg to images_split/train_10_percent/collie/n02106030_1005.jpg images_split/train_10_percent/tibetan_terrier Copying: images_split/train/tibetan_terrier/n02097474_4907.jpg to images_split/train_10_percent/tibetan_terrier/n02097474_4907.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_6202.jpg to images_split/train_10_percent/silky_terrier/n02097658_6202.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_4511.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_4511.jpg images_split/train_10_percent/english_springer Copying: images_split/train/english_springer/n02102040_988.jpg to images_split/train_10_percent/english_springer/n02102040_988.jpg images_split/train_10_percent/german_shepherd Copying: images_split/train/german_shepherd/n02106662_5169.jpg to images_split/train_10_percent/german_shepherd/n02106662_5169.jpg images_split/train_10_percent/samoyed Copying: images_split/train/samoyed/n02111889_2476.jpg to images_split/train_10_percent/samoyed/n02111889_2476.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_1669.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_1669.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_3480.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_3480.jpg images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_4990.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_4990.jpg images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_30.jpg to images_split/train_10_percent/shih_tzu/n02086240_30.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_11626.jpg to images_split/train_10_percent/siberian_husky/n02110185_11626.jpg images_split/train_10_percent/miniature_pinscher Copying: images_split/train/miniature_pinscher/n02107312_612.jpg to images_split/train_10_percent/miniature_pinscher/n02107312_612.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_2329.jpg to images_split/train_10_percent/silky_terrier/n02097658_2329.jpg images_split/train_10_percent/kerry_blue_terrier Copying: images_split/train/kerry_blue_terrier/n02093859_739.jpg to images_split/train_10_percent/kerry_blue_terrier/n02093859_739.jpg images_split/train_10_percent/sussex_spaniel Copying: images_split/train/sussex_spaniel/n02102480_4769.jpg to images_split/train_10_percent/sussex_spaniel/n02102480_4769.jpg images_split/train_10_percent/wire_haired_fox_terrier Copying: images_split/train/wire_haired_fox_terrier/n02095314_3512.jpg to images_split/train_10_percent/wire_haired_fox_terrier/n02095314_3512.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_5024.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_5024.jpg images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_7469.jpg to images_split/train_10_percent/toy_terrier/n02087046_7469.jpg images_split/train_10_percent/irish_water_spaniel Copying: images_split/train/irish_water_spaniel/n02102973_2535.jpg to images_split/train_10_percent/irish_water_spaniel/n02102973_2535.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_6727.jpg to images_split/train_10_percent/standard_poodle/n02113799_6727.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_2404.jpg to images_split/train_10_percent/english_foxhound/n02089973_2404.jpg images_split/train_10_percent/standard_schnauzer Copying: images_split/train/standard_schnauzer/n02097209_1653.jpg to images_split/train_10_percent/standard_schnauzer/n02097209_1653.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_770.jpg to images_split/train_10_percent/boxer/n02108089_770.jpg images_split/train_10_percent/miniature_pinscher Copying: images_split/train/miniature_pinscher/n02107312_811.jpg to images_split/train_10_percent/miniature_pinscher/n02107312_811.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_792.jpg to images_split/train_10_percent/norwich_terrier/n02094258_792.jpg images_split/train_10_percent/bull_mastiff Copying: images_split/train/bull_mastiff/n02108422_2297.jpg to images_split/train_10_percent/bull_mastiff/n02108422_2297.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_2257.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_2257.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_19204.jpg to images_split/train_10_percent/whippet/n02091134_19204.jpg images_split/train_10_percent/appenzeller Copying: images_split/train/appenzeller/n02107908_4079.jpg to images_split/train_10_percent/appenzeller/n02107908_4079.jpg images_split/train_10_percent/american_staffordshire_terrier Copying: images_split/train/american_staffordshire_terrier/n02093428_15280.jpg to images_split/train_10_percent/american_staffordshire_terrier/n02093428_15280.jpg images_split/train_10_percent/scotch_terrier Copying: images_split/train/scotch_terrier/n02097298_7631.jpg to images_split/train_10_percent/scotch_terrier/n02097298_7631.jpg images_split/train_10_percent/affenpinscher Copying: images_split/train/affenpinscher/n02110627_3032.jpg to images_split/train_10_percent/affenpinscher/n02110627_3032.jpg images_split/train_10_percent/kerry_blue_terrier Copying: images_split/train/kerry_blue_terrier/n02093859_2075.jpg to images_split/train_10_percent/kerry_blue_terrier/n02093859_2075.jpg images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_1520.jpg to images_split/train_10_percent/toy_terrier/n02087046_1520.jpg images_split/train_10_percent/miniature_schnauzer Copying: images_split/train/miniature_schnauzer/n02097047_6434.jpg to images_split/train_10_percent/miniature_schnauzer/n02097047_6434.jpg images_split/train_10_percent/black_and_tan_coonhound Copying: images_split/train/black_and_tan_coonhound/n02089078_3078.jpg to images_split/train_10_percent/black_and_tan_coonhound/n02089078_3078.jpg images_split/train_10_percent/kerry_blue_terrier Copying: images_split/train/kerry_blue_terrier/n02093859_1218.jpg to images_split/train_10_percent/kerry_blue_terrier/n02093859_1218.jpg images_split/train_10_percent/eskimo_dog Copying: images_split/train/eskimo_dog/n02109961_12993.jpg to images_split/train_10_percent/eskimo_dog/n02109961_12993.jpg images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_4581.jpg to images_split/train_10_percent/kuvasz/n02104029_4581.jpg images_split/train_10_percent/samoyed Copying: images_split/train/samoyed/n02111889_6950.jpg to images_split/train_10_percent/samoyed/n02111889_6950.jpg images_split/train_10_percent/irish_wolfhound Copying: images_split/train/irish_wolfhound/n02090721_1644.jpg to images_split/train_10_percent/irish_wolfhound/n02090721_1644.jpg images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_8951.jpg to images_split/train_10_percent/toy_poodle/n02113624_8951.jpg images_split/train_10_percent/giant_schnauzer Copying: images_split/train/giant_schnauzer/n02097130_2164.jpg to images_split/train_10_percent/giant_schnauzer/n02097130_2164.jpg images_split/train_10_percent/dandie_dinmont Making directory: images_split/train_10_percent/dandie_dinmont Copying: images_split/train/dandie_dinmont/n02096437_3349.jpg to images_split/train_10_percent/dandie_dinmont/n02096437_3349.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_13016.jpg to images_split/train_10_percent/great_dane/n02109047_13016.jpg images_split/train_10_percent/entlebucher Copying: images_split/train/entlebucher/n02108000_316.jpg to images_split/train_10_percent/entlebucher/n02108000_316.jpg images_split/train_10_percent/entlebucher Copying: images_split/train/entlebucher/n02108000_2878.jpg to images_split/train_10_percent/entlebucher/n02108000_2878.jpg images_split/train_10_percent/appenzeller Copying: images_split/train/appenzeller/n02107908_1575.jpg to images_split/train_10_percent/appenzeller/n02107908_1575.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_5137.jpg to images_split/train_10_percent/weimaraner/n02092339_5137.jpg images_split/train_10_percent/sussex_spaniel Copying: images_split/train/sussex_spaniel/n02102480_3717.jpg to images_split/train_10_percent/sussex_spaniel/n02102480_3717.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_6348.jpg to images_split/train_10_percent/lhasa/n02098413_6348.jpg images_split/train_10_percent/vizsla Copying: images_split/train/vizsla/n02100583_473.jpg to images_split/train_10_percent/vizsla/n02100583_473.jpg images_split/train_10_percent/giant_schnauzer Copying: images_split/train/giant_schnauzer/n02097130_2942.jpg to images_split/train_10_percent/giant_schnauzer/n02097130_2942.jpg images_split/train_10_percent/japanese_spaniel Copying: images_split/train/japanese_spaniel/n02085782_172.jpg to images_split/train_10_percent/japanese_spaniel/n02085782_172.jpg images_split/train_10_percent/chow Copying: images_split/train/chow/n02112137_6314.jpg to images_split/train_10_percent/chow/n02112137_6314.jpg images_split/train_10_percent/french_bulldog Copying: images_split/train/french_bulldog/n02108915_9399.jpg to images_split/train_10_percent/french_bulldog/n02108915_9399.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_3573.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_3573.jpg images_split/train_10_percent/beagle Copying: images_split/train/beagle/n02088364_14369.jpg to images_split/train_10_percent/beagle/n02088364_14369.jpg images_split/train_10_percent/airedale Copying: images_split/train/airedale/n02096051_1761.jpg to images_split/train_10_percent/airedale/n02096051_1761.jpg images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_6328.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_6328.jpg images_split/train_10_percent/blenheim_spaniel Copying: images_split/train/blenheim_spaniel/n02086646_1182.jpg to images_split/train_10_percent/blenheim_spaniel/n02086646_1182.jpg images_split/train_10_percent/dingo Copying: images_split/train/dingo/n02115641_8168.jpg to images_split/train_10_percent/dingo/n02115641_8168.jpg images_split/train_10_percent/appenzeller Copying: images_split/train/appenzeller/n02107908_1235.jpg to images_split/train_10_percent/appenzeller/n02107908_1235.jpg images_split/train_10_percent/wire_haired_fox_terrier Copying: images_split/train/wire_haired_fox_terrier/n02095314_481.jpg to images_split/train_10_percent/wire_haired_fox_terrier/n02095314_481.jpg images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_3150.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_3150.jpg images_split/train_10_percent/english_springer Copying: images_split/train/english_springer/n02102040_1259.jpg to images_split/train_10_percent/english_springer/n02102040_1259.jpg images_split/train_10_percent/pug Copying: images_split/train/pug/n02110958_13263.jpg to images_split/train_10_percent/pug/n02110958_13263.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_182.jpg to images_split/train_10_percent/newfoundland/n02111277_182.jpg images_split/train_10_percent/bloodhound Copying: images_split/train/bloodhound/n02088466_9579.jpg to images_split/train_10_percent/bloodhound/n02088466_9579.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_6840.jpg to images_split/train_10_percent/briard/n02105251_6840.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_15855.jpg to images_split/train_10_percent/lhasa/n02098413_15855.jpg images_split/train_10_percent/scotch_terrier Copying: images_split/train/scotch_terrier/n02097298_3589.jpg to images_split/train_10_percent/scotch_terrier/n02097298_3589.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_3099.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_3099.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_12013.jpg to images_split/train_10_percent/italian_greyhound/n02091032_12013.jpg images_split/train_10_percent/boston_bull Copying: images_split/train/boston_bull/n02096585_9122.jpg to images_split/train_10_percent/boston_bull/n02096585_9122.jpg images_split/train_10_percent/beagle Copying: images_split/train/beagle/n02088364_12710.jpg to images_split/train_10_percent/beagle/n02088364_12710.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_2405.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_2405.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_1345.jpg to images_split/train_10_percent/norwich_terrier/n02094258_1345.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_2143.jpg to images_split/train_10_percent/silky_terrier/n02097658_2143.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_846.jpg to images_split/train_10_percent/english_foxhound/n02089973_846.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_7661.jpg to images_split/train_10_percent/whippet/n02091134_7661.jpg images_split/train_10_percent/english_setter Copying: images_split/train/english_setter/n02100735_216.jpg to images_split/train_10_percent/english_setter/n02100735_216.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_2426.jpg to images_split/train_10_percent/standard_poodle/n02113799_2426.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_6035.jpg to images_split/train_10_percent/basenji/n02110806_6035.jpg images_split/train_10_percent/pug Copying: images_split/train/pug/n02110958_12224.jpg to images_split/train_10_percent/pug/n02110958_12224.jpg images_split/train_10_percent/giant_schnauzer Copying: images_split/train/giant_schnauzer/n02097130_1287.jpg to images_split/train_10_percent/giant_schnauzer/n02097130_1287.jpg images_split/train_10_percent/tibetan_terrier Copying: images_split/train/tibetan_terrier/n02097474_3226.jpg to images_split/train_10_percent/tibetan_terrier/n02097474_3226.jpg images_split/train_10_percent/black_and_tan_coonhound Copying: images_split/train/black_and_tan_coonhound/n02089078_393.jpg to images_split/train_10_percent/black_and_tan_coonhound/n02089078_393.jpg images_split/train_10_percent/bedlington_terrier Copying: images_split/train/bedlington_terrier/n02093647_2108.jpg to images_split/train_10_percent/bedlington_terrier/n02093647_2108.jpg images_split/train_10_percent/bernese_mountain_dog Copying: images_split/train/bernese_mountain_dog/n02107683_6660.jpg to images_split/train_10_percent/bernese_mountain_dog/n02107683_6660.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_2766.jpg to images_split/train_10_percent/weimaraner/n02092339_2766.jpg images_split/train_10_percent/american_staffordshire_terrier Copying: images_split/train/american_staffordshire_terrier/n02093428_5331.jpg to images_split/train_10_percent/american_staffordshire_terrier/n02093428_5331.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_569.jpg to images_split/train_10_percent/english_foxhound/n02089973_569.jpg images_split/train_10_percent/french_bulldog Copying: images_split/train/french_bulldog/n02108915_2118.jpg to images_split/train_10_percent/french_bulldog/n02108915_2118.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_1449.jpg to images_split/train_10_percent/great_dane/n02109047_1449.jpg images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_1828.jpg to images_split/train_10_percent/labrador_retriever/n02099712_1828.jpg images_split/train_10_percent/african_hunting_dog Copying: images_split/train/african_hunting_dog/n02116738_6117.jpg to images_split/train_10_percent/african_hunting_dog/n02116738_6117.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_8345.jpg to images_split/train_10_percent/briard/n02105251_8345.jpg images_split/train_10_percent/keeshond Copying: images_split/train/keeshond/n02112350_8469.jpg to images_split/train_10_percent/keeshond/n02112350_8469.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_4971.jpg to images_split/train_10_percent/italian_greyhound/n02091032_4971.jpg images_split/train_10_percent/bluetick Copying: images_split/train/bluetick/n02088632_1592.jpg to images_split/train_10_percent/bluetick/n02088632_1592.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_6265.jpg to images_split/train_10_percent/great_dane/n02109047_6265.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_2972.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_2972.jpg images_split/train_10_percent/irish_setter Copying: images_split/train/irish_setter/n02100877_1787.jpg to images_split/train_10_percent/irish_setter/n02100877_1787.jpg images_split/train_10_percent/african_hunting_dog Copying: images_split/train/african_hunting_dog/n02116738_8489.jpg to images_split/train_10_percent/african_hunting_dog/n02116738_8489.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_2149.jpg to images_split/train_10_percent/redbone/n02090379_2149.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_7762.jpg to images_split/train_10_percent/siberian_husky/n02110185_7762.jpg images_split/train_10_percent/entlebucher Copying: images_split/train/entlebucher/n02108000_1671.jpg to images_split/train_10_percent/entlebucher/n02108000_1671.jpg images_split/train_10_percent/scotch_terrier Copying: images_split/train/scotch_terrier/n02097298_1007.jpg to images_split/train_10_percent/scotch_terrier/n02097298_1007.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_6867.jpg to images_split/train_10_percent/silky_terrier/n02097658_6867.jpg images_split/train_10_percent/border_collie Copying: images_split/train/border_collie/n02106166_18.jpg to images_split/train_10_percent/border_collie/n02106166_18.jpg images_split/train_10_percent/bernese_mountain_dog Copying: images_split/train/bernese_mountain_dog/n02107683_3908.jpg to images_split/train_10_percent/bernese_mountain_dog/n02107683_3908.jpg images_split/train_10_percent/miniature_schnauzer Copying: images_split/train/miniature_schnauzer/n02097047_6553.jpg to images_split/train_10_percent/miniature_schnauzer/n02097047_6553.jpg images_split/train_10_percent/rottweiler Copying: images_split/train/rottweiler/n02106550_7003.jpg to images_split/train_10_percent/rottweiler/n02106550_7003.jpg images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_9128.jpg to images_split/train_10_percent/papillon/n02086910_9128.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_4100.jpg to images_split/train_10_percent/lhasa/n02098413_4100.jpg images_split/train_10_percent/rottweiler Copying: images_split/train/rottweiler/n02106550_9432.jpg to images_split/train_10_percent/rottweiler/n02106550_9432.jpg images_split/train_10_percent/rhodesian_ridgeback Copying: images_split/train/rhodesian_ridgeback/n02087394_3477.jpg to images_split/train_10_percent/rhodesian_ridgeback/n02087394_3477.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_8743.jpg to images_split/train_10_percent/briard/n02105251_8743.jpg images_split/train_10_percent/clumber Copying: images_split/train/clumber/n02101556_5405.jpg to images_split/train_10_percent/clumber/n02101556_5405.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_13879.jpg to images_split/train_10_percent/afghan_hound/n02088094_13879.jpg images_split/train_10_percent/chesapeake_bay_retriever Copying: images_split/train/chesapeake_bay_retriever/n02099849_513.jpg to images_split/train_10_percent/chesapeake_bay_retriever/n02099849_513.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_5110.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_5110.jpg images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_10785.jpg to images_split/train_10_percent/shih_tzu/n02086240_10785.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_6247.jpg to images_split/train_10_percent/basenji/n02110806_6247.jpg images_split/train_10_percent/pekinese Copying: images_split/train/pekinese/n02086079_15871.jpg to images_split/train_10_percent/pekinese/n02086079_15871.jpg images_split/train_10_percent/entlebucher Copying: images_split/train/entlebucher/n02108000_522.jpg to images_split/train_10_percent/entlebucher/n02108000_522.jpg images_split/train_10_percent/golden_retriever Copying: images_split/train/golden_retriever/n02099601_1768.jpg to images_split/train_10_percent/golden_retriever/n02099601_1768.jpg images_split/train_10_percent/malamute Copying: images_split/train/malamute/n02110063_17572.jpg to images_split/train_10_percent/malamute/n02110063_17572.jpg images_split/train_10_percent/chow Copying: images_split/train/chow/n02112137_8504.jpg to images_split/train_10_percent/chow/n02112137_8504.jpg images_split/train_10_percent/dingo Copying: images_split/train/dingo/n02115641_7071.jpg to images_split/train_10_percent/dingo/n02115641_7071.jpg images_split/train_10_percent/pekinese Copying: images_split/train/pekinese/n02086079_3174.jpg to images_split/train_10_percent/pekinese/n02086079_3174.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_4113.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_4113.jpg images_split/train_10_percent/dandie_dinmont Copying: images_split/train/dandie_dinmont/n02096437_599.jpg to images_split/train_10_percent/dandie_dinmont/n02096437_599.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_7572.jpg to images_split/train_10_percent/collie/n02106030_7572.jpg images_split/train_10_percent/japanese_spaniel Copying: images_split/train/japanese_spaniel/n02085782_1267.jpg to images_split/train_10_percent/japanese_spaniel/n02085782_1267.jpg images_split/train_10_percent/malinois Copying: images_split/train/malinois/n02105162_2896.jpg to images_split/train_10_percent/malinois/n02105162_2896.jpg images_split/train_10_percent/pug Copying: images_split/train/pug/n02110958_15015.jpg to images_split/train_10_percent/pug/n02110958_15015.jpg images_split/train_10_percent/border_terrier Copying: images_split/train/border_terrier/n02093754_4564.jpg to images_split/train_10_percent/border_terrier/n02093754_4564.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_12142.jpg to images_split/train_10_percent/whippet/n02091134_12142.jpg images_split/train_10_percent/dhole Copying: images_split/train/dhole/n02115913_3740.jpg to images_split/train_10_percent/dhole/n02115913_3740.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_7232.jpg to images_split/train_10_percent/borzoi/n02090622_7232.jpg images_split/train_10_percent/gordon_setter Copying: images_split/train/gordon_setter/n02101006_4510.jpg to images_split/train_10_percent/gordon_setter/n02101006_4510.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_6077.jpg to images_split/train_10_percent/weimaraner/n02092339_6077.jpg images_split/train_10_percent/miniature_poodle Copying: images_split/train/miniature_poodle/n02113712_3207.jpg to images_split/train_10_percent/miniature_poodle/n02113712_3207.jpg images_split/train_10_percent/boston_bull Copying: images_split/train/boston_bull/n02096585_1532.jpg to images_split/train_10_percent/boston_bull/n02096585_1532.jpg images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_7245.jpg to images_split/train_10_percent/toy_terrier/n02087046_7245.jpg images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_3642.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_3642.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_16509.jpg to images_split/train_10_percent/collie/n02106030_16509.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_875.jpg to images_split/train_10_percent/great_dane/n02109047_875.jpg images_split/train_10_percent/bull_mastiff Copying: images_split/train/bull_mastiff/n02108422_4793.jpg to images_split/train_10_percent/bull_mastiff/n02108422_4793.jpg images_split/train_10_percent/miniature_poodle Copying: images_split/train/miniature_poodle/n02113712_2596.jpg to images_split/train_10_percent/miniature_poodle/n02113712_2596.jpg images_split/train_10_percent/doberman Copying: images_split/train/doberman/n02107142_17899.jpg to images_split/train_10_percent/doberman/n02107142_17899.jpg images_split/train_10_percent/bull_mastiff Copying: images_split/train/bull_mastiff/n02108422_1701.jpg to images_split/train_10_percent/bull_mastiff/n02108422_1701.jpg images_split/train_10_percent/schipperke Copying: images_split/train/schipperke/n02104365_8998.jpg to images_split/train_10_percent/schipperke/n02104365_8998.jpg images_split/train_10_percent/irish_wolfhound Copying: images_split/train/irish_wolfhound/n02090721_7155.jpg to images_split/train_10_percent/irish_wolfhound/n02090721_7155.jpg images_split/train_10_percent/dhole Copying: images_split/train/dhole/n02115913_4266.jpg to images_split/train_10_percent/dhole/n02115913_4266.jpg images_split/train_10_percent/soft_coated_wheaten_terrier Copying: images_split/train/soft_coated_wheaten_terrier/n02098105_1386.jpg to images_split/train_10_percent/soft_coated_wheaten_terrier/n02098105_1386.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_2755.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_2755.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_15784.jpg to images_split/train_10_percent/whippet/n02091134_15784.jpg images_split/train_10_percent/great_pyrenees Copying: images_split/train/great_pyrenees/n02111500_3597.jpg to images_split/train_10_percent/great_pyrenees/n02111500_3597.jpg images_split/train_10_percent/black_and_tan_coonhound Copying: images_split/train/black_and_tan_coonhound/n02089078_111.jpg to images_split/train_10_percent/black_and_tan_coonhound/n02089078_111.jpg images_split/train_10_percent/groenendael Copying: images_split/train/groenendael/n02105056_6596.jpg to images_split/train_10_percent/groenendael/n02105056_6596.jpg images_split/train_10_percent/standard_schnauzer Copying: images_split/train/standard_schnauzer/n02097209_1536.jpg to images_split/train_10_percent/standard_schnauzer/n02097209_1536.jpg images_split/train_10_percent/schipperke Copying: images_split/train/schipperke/n02104365_2435.jpg to images_split/train_10_percent/schipperke/n02104365_2435.jpg images_split/train_10_percent/bull_mastiff Copying: images_split/train/bull_mastiff/n02108422_2123.jpg to images_split/train_10_percent/bull_mastiff/n02108422_2123.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_16173.jpg to images_split/train_10_percent/collie/n02106030_16173.jpg images_split/train_10_percent/miniature_schnauzer Copying: images_split/train/miniature_schnauzer/n02097047_1589.jpg to images_split/train_10_percent/miniature_schnauzer/n02097047_1589.jpg images_split/train_10_percent/flat_coated_retriever Copying: images_split/train/flat_coated_retriever/n02099267_1205.jpg to images_split/train_10_percent/flat_coated_retriever/n02099267_1205.jpg images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_6802.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_6802.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_4452.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_4452.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_258.jpg to images_split/train_10_percent/weimaraner/n02092339_258.jpg images_split/train_10_percent/pekinese Copying: images_split/train/pekinese/n02086079_1820.jpg to images_split/train_10_percent/pekinese/n02086079_1820.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_1115.jpg to images_split/train_10_percent/leonberg/n02111129_1115.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_3165.jpg to images_split/train_10_percent/newfoundland/n02111277_3165.jpg images_split/train_10_percent/schipperke Copying: images_split/train/schipperke/n02104365_7629.jpg to images_split/train_10_percent/schipperke/n02104365_7629.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_5541.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_5541.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_4854.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_4854.jpg images_split/train_10_percent/tibetan_mastiff Copying: images_split/train/tibetan_mastiff/n02108551_2596.jpg to images_split/train_10_percent/tibetan_mastiff/n02108551_2596.jpg images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_2819.jpg to images_split/train_10_percent/toy_terrier/n02087046_2819.jpg images_split/train_10_percent/otterhound Copying: images_split/train/otterhound/n02091635_1043.jpg to images_split/train_10_percent/otterhound/n02091635_1043.jpg images_split/train_10_percent/vizsla Copying: images_split/train/vizsla/n02100583_10960.jpg to images_split/train_10_percent/vizsla/n02100583_10960.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_2009.jpg to images_split/train_10_percent/great_dane/n02109047_2009.jpg images_split/train_10_percent/miniature_pinscher Copying: images_split/train/miniature_pinscher/n02107312_4996.jpg to images_split/train_10_percent/miniature_pinscher/n02107312_4996.jpg images_split/train_10_percent/airedale Copying: images_split/train/airedale/n02096051_8019.jpg to images_split/train_10_percent/airedale/n02096051_8019.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_13728.jpg to images_split/train_10_percent/newfoundland/n02111277_13728.jpg images_split/train_10_percent/old_english_sheepdog Copying: images_split/train/old_english_sheepdog/n02105641_3499.jpg to images_split/train_10_percent/old_english_sheepdog/n02105641_3499.jpg images_split/train_10_percent/australian_terrier Copying: images_split/train/australian_terrier/n02096294_7711.jpg to images_split/train_10_percent/australian_terrier/n02096294_7711.jpg images_split/train_10_percent/chihuahua Copying: images_split/train/chihuahua/n02085620_5771.jpg to images_split/train_10_percent/chihuahua/n02085620_5771.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_5814.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_5814.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_3454.jpg to images_split/train_10_percent/newfoundland/n02111277_3454.jpg images_split/train_10_percent/japanese_spaniel Copying: images_split/train/japanese_spaniel/n02085782_3781.jpg to images_split/train_10_percent/japanese_spaniel/n02085782_3781.jpg images_split/train_10_percent/sealyham_terrier Copying: images_split/train/sealyham_terrier/n02095889_2977.jpg to images_split/train_10_percent/sealyham_terrier/n02095889_2977.jpg images_split/train_10_percent/samoyed Copying: images_split/train/samoyed/n02111889_5778.jpg to images_split/train_10_percent/samoyed/n02111889_5778.jpg images_split/train_10_percent/malinois Copying: images_split/train/malinois/n02105162_10375.jpg to images_split/train_10_percent/malinois/n02105162_10375.jpg images_split/train_10_percent/pomeranian Copying: images_split/train/pomeranian/n02112018_6159.jpg to images_split/train_10_percent/pomeranian/n02112018_6159.jpg images_split/train_10_percent/cardigan Copying: images_split/train/cardigan/n02113186_13169.jpg to images_split/train_10_percent/cardigan/n02113186_13169.jpg images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_3947.jpg to images_split/train_10_percent/labrador_retriever/n02099712_3947.jpg images_split/train_10_percent/rhodesian_ridgeback Copying: images_split/train/rhodesian_ridgeback/n02087394_7544.jpg to images_split/train_10_percent/rhodesian_ridgeback/n02087394_7544.jpg images_split/train_10_percent/irish_water_spaniel Copying: images_split/train/irish_water_spaniel/n02102973_273.jpg to images_split/train_10_percent/irish_water_spaniel/n02102973_273.jpg images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_525.jpg to images_split/train_10_percent/kuvasz/n02104029_525.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_5093.jpg to images_split/train_10_percent/italian_greyhound/n02091032_5093.jpg images_split/train_10_percent/irish_water_spaniel Copying: images_split/train/irish_water_spaniel/n02102973_4287.jpg to images_split/train_10_percent/irish_water_spaniel/n02102973_4287.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_746.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_746.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_6690.jpg to images_split/train_10_percent/afghan_hound/n02088094_6690.jpg images_split/train_10_percent/bernese_mountain_dog Copying: images_split/train/bernese_mountain_dog/n02107683_3278.jpg to images_split/train_10_percent/bernese_mountain_dog/n02107683_3278.jpg images_split/train_10_percent/kelpie Copying: images_split/train/kelpie/n02105412_2212.jpg to images_split/train_10_percent/kelpie/n02105412_2212.jpg images_split/train_10_percent/japanese_spaniel Copying: images_split/train/japanese_spaniel/n02085782_1528.jpg to images_split/train_10_percent/japanese_spaniel/n02085782_1528.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_1655.jpg to images_split/train_10_percent/lhasa/n02098413_1655.jpg images_split/train_10_percent/soft_coated_wheaten_terrier Copying: images_split/train/soft_coated_wheaten_terrier/n02098105_257.jpg to images_split/train_10_percent/soft_coated_wheaten_terrier/n02098105_257.jpg images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_5008.jpg to images_split/train_10_percent/labrador_retriever/n02099712_5008.jpg images_split/train_10_percent/groenendael Copying: images_split/train/groenendael/n02105056_5145.jpg to images_split/train_10_percent/groenendael/n02105056_5145.jpg images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_14509.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_14509.jpg images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_1773.jpg to images_split/train_10_percent/mexican_hairless/n02113978_1773.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_2795.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_2795.jpg images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_1480.jpg to images_split/train_10_percent/mexican_hairless/n02113978_1480.jpg images_split/train_10_percent/irish_terrier Copying: images_split/train/irish_terrier/n02093991_3935.jpg to images_split/train_10_percent/irish_terrier/n02093991_3935.jpg images_split/train_10_percent/maltese_dog Copying: images_split/train/maltese_dog/n02085936_6927.jpg to images_split/train_10_percent/maltese_dog/n02085936_6927.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_5649.jpg to images_split/train_10_percent/briard/n02105251_5649.jpg images_split/train_10_percent/english_springer Copying: images_split/train/english_springer/n02102040_742.jpg to images_split/train_10_percent/english_springer/n02102040_742.jpg images_split/train_10_percent/soft_coated_wheaten_terrier Copying: images_split/train/soft_coated_wheaten_terrier/n02098105_3855.jpg to images_split/train_10_percent/soft_coated_wheaten_terrier/n02098105_3855.jpg images_split/train_10_percent/airedale Copying: images_split/train/airedale/n02096051_1121.jpg to images_split/train_10_percent/airedale/n02096051_1121.jpg images_split/train_10_percent/pug Copying: images_split/train/pug/n02110958_14647.jpg to images_split/train_10_percent/pug/n02110958_14647.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_2249.jpg to images_split/train_10_percent/basenji/n02110806_2249.jpg images_split/train_10_percent/miniature_pinscher Copying: images_split/train/miniature_pinscher/n02107312_1590.jpg to images_split/train_10_percent/miniature_pinscher/n02107312_1590.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_11467.jpg to images_split/train_10_percent/lhasa/n02098413_11467.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_4161.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_4161.jpg images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_3705.jpg to images_split/train_10_percent/komondor/n02105505_3705.jpg images_split/train_10_percent/chihuahua Copying: images_split/train/chihuahua/n02085620_8611.jpg to images_split/train_10_percent/chihuahua/n02085620_8611.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_2653.jpg to images_split/train_10_percent/weimaraner/n02092339_2653.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_22413.jpg to images_split/train_10_percent/great_dane/n02109047_22413.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_3799.jpg to images_split/train_10_percent/english_foxhound/n02089973_3799.jpg images_split/train_10_percent/kelpie Copying: images_split/train/kelpie/n02105412_3065.jpg to images_split/train_10_percent/kelpie/n02105412_3065.jpg images_split/train_10_percent/norwegian_elkhound Copying: images_split/train/norwegian_elkhound/n02091467_2950.jpg to images_split/train_10_percent/norwegian_elkhound/n02091467_2950.jpg images_split/train_10_percent/vizsla Copying: images_split/train/vizsla/n02100583_9794.jpg to images_split/train_10_percent/vizsla/n02100583_9794.jpg images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_4087.jpg to images_split/train_10_percent/toy_poodle/n02113624_4087.jpg images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_2816.jpg to images_split/train_10_percent/toy_poodle/n02113624_2816.jpg images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_3117.jpg to images_split/train_10_percent/papillon/n02086910_3117.jpg images_split/train_10_percent/wire_haired_fox_terrier Copying: images_split/train/wire_haired_fox_terrier/n02095314_3153.jpg to images_split/train_10_percent/wire_haired_fox_terrier/n02095314_3153.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_3710.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_3710.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_1572.jpg to images_split/train_10_percent/newfoundland/n02111277_1572.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_14479.jpg to images_split/train_10_percent/siberian_husky/n02110185_14479.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_3377.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_3377.jpg images_split/train_10_percent/brabancon_griffon Copying: images_split/train/brabancon_griffon/n02112706_360.jpg to images_split/train_10_percent/brabancon_griffon/n02112706_360.jpg images_split/train_10_percent/old_english_sheepdog Copying: images_split/train/old_english_sheepdog/n02105641_5577.jpg to images_split/train_10_percent/old_english_sheepdog/n02105641_5577.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_980.jpg to images_split/train_10_percent/silky_terrier/n02097658_980.jpg images_split/train_10_percent/english_springer Copying: images_split/train/english_springer/n02102040_6843.jpg to images_split/train_10_percent/english_springer/n02102040_6843.jpg images_split/train_10_percent/golden_retriever Copying: images_split/train/golden_retriever/n02099601_2495.jpg to images_split/train_10_percent/golden_retriever/n02099601_2495.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_4388.jpg to images_split/train_10_percent/redbone/n02090379_4388.jpg images_split/train_10_percent/dhole Copying: images_split/train/dhole/n02115913_92.jpg to images_split/train_10_percent/dhole/n02115913_92.jpg images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_6924.jpg to images_split/train_10_percent/shih_tzu/n02086240_6924.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_4472.jpg to images_split/train_10_percent/basenji/n02110806_4472.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_7099.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_7099.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_4359.jpg to images_split/train_10_percent/english_foxhound/n02089973_4359.jpg images_split/train_10_percent/kerry_blue_terrier Copying: images_split/train/kerry_blue_terrier/n02093859_1120.jpg to images_split/train_10_percent/kerry_blue_terrier/n02093859_1120.jpg images_split/train_10_percent/tibetan_terrier Copying: images_split/train/tibetan_terrier/n02097474_5280.jpg to images_split/train_10_percent/tibetan_terrier/n02097474_5280.jpg images_split/train_10_percent/flat_coated_retriever Copying: images_split/train/flat_coated_retriever/n02099267_4048.jpg to images_split/train_10_percent/flat_coated_retriever/n02099267_4048.jpg images_split/train_10_percent/keeshond Copying: images_split/train/keeshond/n02112350_7087.jpg to images_split/train_10_percent/keeshond/n02112350_7087.jpg images_split/train_10_percent/chihuahua Copying: images_split/train/chihuahua/n02085620_8558.jpg to images_split/train_10_percent/chihuahua/n02085620_8558.jpg images_split/train_10_percent/irish_terrier Copying: images_split/train/irish_terrier/n02093991_1978.jpg to images_split/train_10_percent/irish_terrier/n02093991_1978.jpg images_split/train_10_percent/german_short_haired_pointer Copying: images_split/train/german_short_haired_pointer/n02100236_4900.jpg to images_split/train_10_percent/german_short_haired_pointer/n02100236_4900.jpg images_split/train_10_percent/irish_setter Copying: images_split/train/irish_setter/n02100877_5231.jpg to images_split/train_10_percent/irish_setter/n02100877_5231.jpg images_split/train_10_percent/samoyed Copying: images_split/train/samoyed/n02111889_1314.jpg to images_split/train_10_percent/samoyed/n02111889_1314.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_2958.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_2958.jpg images_split/train_10_percent/norwegian_elkhound Copying: images_split/train/norwegian_elkhound/n02091467_3849.jpg to images_split/train_10_percent/norwegian_elkhound/n02091467_3849.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_492.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_492.jpg images_split/train_10_percent/border_collie Copying: images_split/train/border_collie/n02106166_1460.jpg to images_split/train_10_percent/border_collie/n02106166_1460.jpg images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_2306.jpg to images_split/train_10_percent/mexican_hairless/n02113978_2306.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_6564.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_6564.jpg images_split/train_10_percent/saint_bernard Copying: images_split/train/saint_bernard/n02109525_368.jpg to images_split/train_10_percent/saint_bernard/n02109525_368.jpg images_split/train_10_percent/bull_mastiff Copying: images_split/train/bull_mastiff/n02108422_2990.jpg to images_split/train_10_percent/bull_mastiff/n02108422_2990.jpg images_split/train_10_percent/english_setter Copying: images_split/train/english_setter/n02100735_6665.jpg to images_split/train_10_percent/english_setter/n02100735_6665.jpg images_split/train_10_percent/bedlington_terrier Copying: images_split/train/bedlington_terrier/n02093647_1108.jpg to images_split/train_10_percent/bedlington_terrier/n02093647_1108.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_2700.jpg to images_split/train_10_percent/leonberg/n02111129_2700.jpg images_split/train_10_percent/german_shepherd Copying: images_split/train/german_shepherd/n02106662_7545.jpg to images_split/train_10_percent/german_shepherd/n02106662_7545.jpg images_split/train_10_percent/clumber Copying: images_split/train/clumber/n02101556_6228.jpg to images_split/train_10_percent/clumber/n02101556_6228.jpg images_split/train_10_percent/pomeranian Copying: images_split/train/pomeranian/n02112018_7880.jpg to images_split/train_10_percent/pomeranian/n02112018_7880.jpg images_split/train_10_percent/gordon_setter Copying: images_split/train/gordon_setter/n02101006_3807.jpg to images_split/train_10_percent/gordon_setter/n02101006_3807.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_6131.jpg to images_split/train_10_percent/borzoi/n02090622_6131.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_2751.jpg to images_split/train_10_percent/leonberg/n02111129_2751.jpg images_split/train_10_percent/american_staffordshire_terrier Copying: images_split/train/american_staffordshire_terrier/n02093428_10381.jpg to images_split/train_10_percent/american_staffordshire_terrier/n02093428_10381.jpg images_split/train_10_percent/chesapeake_bay_retriever Copying: images_split/train/chesapeake_bay_retriever/n02099849_435.jpg to images_split/train_10_percent/chesapeake_bay_retriever/n02099849_435.jpg images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_3184.jpg to images_split/train_10_percent/mexican_hairless/n02113978_3184.jpg images_split/train_10_percent/pekinese Copying: images_split/train/pekinese/n02086079_7235.jpg to images_split/train_10_percent/pekinese/n02086079_7235.jpg images_split/train_10_percent/scotch_terrier Copying: images_split/train/scotch_terrier/n02097298_8392.jpg to images_split/train_10_percent/scotch_terrier/n02097298_8392.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_14677.jpg to images_split/train_10_percent/collie/n02106030_14677.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_5654.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_5654.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_27131.jpg to images_split/train_10_percent/great_dane/n02109047_27131.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_1206.jpg to images_split/train_10_percent/leonberg/n02111129_1206.jpg images_split/train_10_percent/bouvier_des_flandres Copying: images_split/train/bouvier_des_flandres/n02106382_241.jpg to images_split/train_10_percent/bouvier_des_flandres/n02106382_241.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_3721.jpg to images_split/train_10_percent/redbone/n02090379_3721.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_12717.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_12717.jpg images_split/train_10_percent/dandie_dinmont Copying: images_split/train/dandie_dinmont/n02096437_335.jpg to images_split/train_10_percent/dandie_dinmont/n02096437_335.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_7170.jpg to images_split/train_10_percent/briard/n02105251_7170.jpg images_split/train_10_percent/ibizan_hound Copying: images_split/train/ibizan_hound/n02091244_5601.jpg to images_split/train_10_percent/ibizan_hound/n02091244_5601.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_7260.jpg to images_split/train_10_percent/afghan_hound/n02088094_7260.jpg images_split/train_10_percent/rottweiler Copying: images_split/train/rottweiler/n02106550_4987.jpg to images_split/train_10_percent/rottweiler/n02106550_4987.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_2157.jpg to images_split/train_10_percent/basenji/n02110806_2157.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_5894.jpg to images_split/train_10_percent/great_dane/n02109047_5894.jpg images_split/train_10_percent/affenpinscher Copying: images_split/train/affenpinscher/n02110627_12556.jpg to images_split/train_10_percent/affenpinscher/n02110627_12556.jpg images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_1559.jpg to images_split/train_10_percent/toy_poodle/n02113624_1559.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_1590.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_1590.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_9320.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_9320.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_399.jpg to images_split/train_10_percent/newfoundland/n02111277_399.jpg images_split/train_10_percent/english_setter Copying: images_split/train/english_setter/n02100735_10175.jpg to images_split/train_10_percent/english_setter/n02100735_10175.jpg images_split/train_10_percent/irish_water_spaniel Copying: images_split/train/irish_water_spaniel/n02102973_1846.jpg to images_split/train_10_percent/irish_water_spaniel/n02102973_1846.jpg images_split/train_10_percent/cardigan Copying: images_split/train/cardigan/n02113186_11741.jpg to images_split/train_10_percent/cardigan/n02113186_11741.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_1638.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_1638.jpg images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_2467.jpg to images_split/train_10_percent/kuvasz/n02104029_2467.jpg images_split/train_10_percent/walker_hound Copying: images_split/train/walker_hound/n02089867_2039.jpg to images_split/train_10_percent/walker_hound/n02089867_2039.jpg images_split/train_10_percent/rhodesian_ridgeback Copying: images_split/train/rhodesian_ridgeback/n02087394_1099.jpg to images_split/train_10_percent/rhodesian_ridgeback/n02087394_1099.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_3697.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_3697.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_6485.jpg to images_split/train_10_percent/afghan_hound/n02088094_6485.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_5182.jpg to images_split/train_10_percent/redbone/n02090379_5182.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_2300.jpg to images_split/train_10_percent/english_foxhound/n02089973_2300.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_5812.jpg to images_split/train_10_percent/afghan_hound/n02088094_5812.jpg images_split/train_10_percent/african_hunting_dog Copying: images_split/train/african_hunting_dog/n02116738_5936.jpg to images_split/train_10_percent/african_hunting_dog/n02116738_5936.jpg images_split/train_10_percent/saluki Copying: images_split/train/saluki/n02091831_3038.jpg to images_split/train_10_percent/saluki/n02091831_3038.jpg images_split/train_10_percent/french_bulldog Copying: images_split/train/french_bulldog/n02108915_644.jpg to images_split/train_10_percent/french_bulldog/n02108915_644.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_1220.jpg to images_split/train_10_percent/norwich_terrier/n02094258_1220.jpg images_split/train_10_percent/ibizan_hound Copying: images_split/train/ibizan_hound/n02091244_4914.jpg to images_split/train_10_percent/ibizan_hound/n02091244_4914.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_5238.jpg to images_split/train_10_percent/basenji/n02110806_5238.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_816.jpg to images_split/train_10_percent/silky_terrier/n02097658_816.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_2917.jpg to images_split/train_10_percent/boxer/n02108089_2917.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_4244.jpg to images_split/train_10_percent/basenji/n02110806_4244.jpg images_split/train_10_percent/dhole Copying: images_split/train/dhole/n02115913_4110.jpg to images_split/train_10_percent/dhole/n02115913_4110.jpg images_split/train_10_percent/great_pyrenees Copying: images_split/train/great_pyrenees/n02111500_4590.jpg to images_split/train_10_percent/great_pyrenees/n02111500_4590.jpg images_split/train_10_percent/sealyham_terrier Copying: images_split/train/sealyham_terrier/n02095889_6232.jpg to images_split/train_10_percent/sealyham_terrier/n02095889_6232.jpg images_split/train_10_percent/malamute Copying: images_split/train/malamute/n02110063_13541.jpg to images_split/train_10_percent/malamute/n02110063_13541.jpg images_split/train_10_percent/english_setter Copying: images_split/train/english_setter/n02100735_9865.jpg to images_split/train_10_percent/english_setter/n02100735_9865.jpg images_split/train_10_percent/rottweiler Copying: images_split/train/rottweiler/n02106550_13226.jpg to images_split/train_10_percent/rottweiler/n02106550_13226.jpg images_split/train_10_percent/saint_bernard Copying: images_split/train/saint_bernard/n02109525_16284.jpg to images_split/train_10_percent/saint_bernard/n02109525_16284.jpg images_split/train_10_percent/blenheim_spaniel Copying: images_split/train/blenheim_spaniel/n02086646_20.jpg to images_split/train_10_percent/blenheim_spaniel/n02086646_20.jpg images_split/train_10_percent/standard_schnauzer Copying: images_split/train/standard_schnauzer/n02097209_221.jpg to images_split/train_10_percent/standard_schnauzer/n02097209_221.jpg images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_16145.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_16145.jpg images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_4808.jpg to images_split/train_10_percent/toy_terrier/n02087046_4808.jpg images_split/train_10_percent/dhole Copying: images_split/train/dhole/n02115913_1352.jpg to images_split/train_10_percent/dhole/n02115913_1352.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_1359.jpg to images_split/train_10_percent/basenji/n02110806_1359.jpg images_split/train_10_percent/wire_haired_fox_terrier Copying: images_split/train/wire_haired_fox_terrier/n02095314_1772.jpg to images_split/train_10_percent/wire_haired_fox_terrier/n02095314_1772.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_763.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_763.jpg images_split/train_10_percent/irish_wolfhound Copying: images_split/train/irish_wolfhound/n02090721_1105.jpg to images_split/train_10_percent/irish_wolfhound/n02090721_1105.jpg images_split/train_10_percent/norwegian_elkhound Copying: images_split/train/norwegian_elkhound/n02091467_1760.jpg to images_split/train_10_percent/norwegian_elkhound/n02091467_1760.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_6162.jpg to images_split/train_10_percent/lhasa/n02098413_6162.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_13898.jpg to images_split/train_10_percent/boxer/n02108089_13898.jpg images_split/train_10_percent/basset Copying: images_split/train/basset/n02088238_9994.jpg to images_split/train_10_percent/basset/n02088238_9994.jpg images_split/train_10_percent/german_short_haired_pointer Copying: images_split/train/german_short_haired_pointer/n02100236_5647.jpg to images_split/train_10_percent/german_short_haired_pointer/n02100236_5647.jpg images_split/train_10_percent/bernese_mountain_dog Copying: images_split/train/bernese_mountain_dog/n02107683_4695.jpg to images_split/train_10_percent/bernese_mountain_dog/n02107683_4695.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_5753.jpg to images_split/train_10_percent/boxer/n02108089_5753.jpg images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_2223.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_2223.jpg images_split/train_10_percent/groenendael Copying: images_split/train/groenendael/n02105056_6614.jpg to images_split/train_10_percent/groenendael/n02105056_6614.jpg images_split/train_10_percent/gordon_setter Copying: images_split/train/gordon_setter/n02101006_635.jpg to images_split/train_10_percent/gordon_setter/n02101006_635.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_4323.jpg to images_split/train_10_percent/italian_greyhound/n02091032_4323.jpg images_split/train_10_percent/pekinese Copying: images_split/train/pekinese/n02086079_17291.jpg to images_split/train_10_percent/pekinese/n02086079_17291.jpg images_split/train_10_percent/wire_haired_fox_terrier Copying: images_split/train/wire_haired_fox_terrier/n02095314_1782.jpg to images_split/train_10_percent/wire_haired_fox_terrier/n02095314_1782.jpg images_split/train_10_percent/kelpie Copying: images_split/train/kelpie/n02105412_1031.jpg to images_split/train_10_percent/kelpie/n02105412_1031.jpg images_split/train_10_percent/border_terrier Copying: images_split/train/border_terrier/n02093754_5261.jpg to images_split/train_10_percent/border_terrier/n02093754_5261.jpg images_split/train_10_percent/keeshond Copying: images_split/train/keeshond/n02112350_7952.jpg to images_split/train_10_percent/keeshond/n02112350_7952.jpg images_split/train_10_percent/otterhound Copying: images_split/train/otterhound/n02091635_470.jpg to images_split/train_10_percent/otterhound/n02091635_470.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_2732.jpg to images_split/train_10_percent/norwich_terrier/n02094258_2732.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_3328.jpg to images_split/train_10_percent/siberian_husky/n02110185_3328.jpg images_split/train_10_percent/keeshond Copying: images_split/train/keeshond/n02112350_6007.jpg to images_split/train_10_percent/keeshond/n02112350_6007.jpg images_split/train_10_percent/irish_setter Copying: images_split/train/irish_setter/n02100877_2952.jpg to images_split/train_10_percent/irish_setter/n02100877_2952.jpg images_split/train_10_percent/dhole Copying: images_split/train/dhole/n02115913_3842.jpg to images_split/train_10_percent/dhole/n02115913_3842.jpg images_split/train_10_percent/curly_coated_retriever Copying: images_split/train/curly_coated_retriever/n02099429_1701.jpg to images_split/train_10_percent/curly_coated_retriever/n02099429_1701.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_1219.jpg to images_split/train_10_percent/norwich_terrier/n02094258_1219.jpg images_split/train_10_percent/weimaraner Copying: images_split/train/weimaraner/n02092339_1013.jpg to images_split/train_10_percent/weimaraner/n02092339_1013.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_5439.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_5439.jpg images_split/train_10_percent/afghan_hound Copying: images_split/train/afghan_hound/n02088094_3613.jpg to images_split/train_10_percent/afghan_hound/n02088094_3613.jpg images_split/train_10_percent/otterhound Copying: images_split/train/otterhound/n02091635_1492.jpg to images_split/train_10_percent/otterhound/n02091635_1492.jpg images_split/train_10_percent/australian_terrier Copying: images_split/train/australian_terrier/n02096294_167.jpg to images_split/train_10_percent/australian_terrier/n02096294_167.jpg images_split/train_10_percent/chesapeake_bay_retriever Copying: images_split/train/chesapeake_bay_retriever/n02099849_3403.jpg to images_split/train_10_percent/chesapeake_bay_retriever/n02099849_3403.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_855.jpg to images_split/train_10_percent/redbone/n02090379_855.jpg images_split/train_10_percent/chow Copying: images_split/train/chow/n02112137_10654.jpg to images_split/train_10_percent/chow/n02112137_10654.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_7751.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_7751.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_90.jpg to images_split/train_10_percent/norwich_terrier/n02094258_90.jpg images_split/train_10_percent/standard_schnauzer Copying: images_split/train/standard_schnauzer/n02097209_991.jpg to images_split/train_10_percent/standard_schnauzer/n02097209_991.jpg images_split/train_10_percent/border_terrier Copying: images_split/train/border_terrier/n02093754_6992.jpg to images_split/train_10_percent/border_terrier/n02093754_6992.jpg images_split/train_10_percent/german_shepherd Copying: images_split/train/german_shepherd/n02106662_23360.jpg to images_split/train_10_percent/german_shepherd/n02106662_23360.jpg images_split/train_10_percent/cardigan Copying: images_split/train/cardigan/n02113186_6415.jpg to images_split/train_10_percent/cardigan/n02113186_6415.jpg images_split/train_10_percent/kerry_blue_terrier Copying: images_split/train/kerry_blue_terrier/n02093859_1279.jpg to images_split/train_10_percent/kerry_blue_terrier/n02093859_1279.jpg images_split/train_10_percent/saint_bernard Copying: images_split/train/saint_bernard/n02109525_2770.jpg to images_split/train_10_percent/saint_bernard/n02109525_2770.jpg images_split/train_10_percent/malamute Copying: images_split/train/malamute/n02110063_11227.jpg to images_split/train_10_percent/malamute/n02110063_11227.jpg images_split/train_10_percent/miniature_pinscher Copying: images_split/train/miniature_pinscher/n02107312_6380.jpg to images_split/train_10_percent/miniature_pinscher/n02107312_6380.jpg images_split/train_10_percent/pekinese Copying: images_split/train/pekinese/n02086079_5053.jpg to images_split/train_10_percent/pekinese/n02086079_5053.jpg images_split/train_10_percent/bloodhound Copying: images_split/train/bloodhound/n02088466_4731.jpg to images_split/train_10_percent/bloodhound/n02088466_4731.jpg images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_5679.jpg to images_split/train_10_percent/labrador_retriever/n02099712_5679.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_11616.jpg to images_split/train_10_percent/boxer/n02108089_11616.jpg images_split/train_10_percent/eskimo_dog Copying: images_split/train/eskimo_dog/n02109961_3217.jpg to images_split/train_10_percent/eskimo_dog/n02109961_3217.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_2599.jpg to images_split/train_10_percent/english_foxhound/n02089973_2599.jpg images_split/train_10_percent/clumber Copying: images_split/train/clumber/n02101556_3100.jpg to images_split/train_10_percent/clumber/n02101556_3100.jpg images_split/train_10_percent/english_setter Copying: images_split/train/english_setter/n02100735_9111.jpg to images_split/train_10_percent/english_setter/n02100735_9111.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_49.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_49.jpg images_split/train_10_percent/saint_bernard Copying: images_split/train/saint_bernard/n02109525_1843.jpg to images_split/train_10_percent/saint_bernard/n02109525_1843.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_501.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_501.jpg images_split/train_10_percent/chow Copying: images_split/train/chow/n02112137_12685.jpg to images_split/train_10_percent/chow/n02112137_12685.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_5936.jpg to images_split/train_10_percent/great_dane/n02109047_5936.jpg images_split/train_10_percent/great_pyrenees Copying: images_split/train/great_pyrenees/n02111500_870.jpg to images_split/train_10_percent/great_pyrenees/n02111500_870.jpg images_split/train_10_percent/entlebucher Copying: images_split/train/entlebucher/n02108000_326.jpg to images_split/train_10_percent/entlebucher/n02108000_326.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_6377.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_6377.jpg images_split/train_10_percent/curly_coated_retriever Copying: images_split/train/curly_coated_retriever/n02099429_3103.jpg to images_split/train_10_percent/curly_coated_retriever/n02099429_3103.jpg images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_357.jpg to images_split/train_10_percent/labrador_retriever/n02099712_357.jpg images_split/train_10_percent/kelpie Copying: images_split/train/kelpie/n02105412_1211.jpg to images_split/train_10_percent/kelpie/n02105412_1211.jpg images_split/train_10_percent/great_pyrenees Copying: images_split/train/great_pyrenees/n02111500_2746.jpg to images_split/train_10_percent/great_pyrenees/n02111500_2746.jpg images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_4282.jpg to images_split/train_10_percent/komondor/n02105505_4282.jpg images_split/train_10_percent/miniature_poodle Copying: images_split/train/miniature_poodle/n02113712_8756.jpg to images_split/train_10_percent/miniature_poodle/n02113712_8756.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_936.jpg to images_split/train_10_percent/standard_poodle/n02113799_936.jpg images_split/train_10_percent/english_setter Copying: images_split/train/english_setter/n02100735_7838.jpg to images_split/train_10_percent/english_setter/n02100735_7838.jpg images_split/train_10_percent/golden_retriever Copying: images_split/train/golden_retriever/n02099601_704.jpg to images_split/train_10_percent/golden_retriever/n02099601_704.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_716.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_716.jpg images_split/train_10_percent/beagle Copying: images_split/train/beagle/n02088364_4070.jpg to images_split/train_10_percent/beagle/n02088364_4070.jpg images_split/train_10_percent/tibetan_terrier Copying: images_split/train/tibetan_terrier/n02097474_1328.jpg to images_split/train_10_percent/tibetan_terrier/n02097474_1328.jpg images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_7418.jpg to images_split/train_10_percent/labrador_retriever/n02099712_7418.jpg images_split/train_10_percent/pug Copying: images_split/train/pug/n02110958_13439.jpg to images_split/train_10_percent/pug/n02110958_13439.jpg images_split/train_10_percent/pug Copying: images_split/train/pug/n02110958_12120.jpg to images_split/train_10_percent/pug/n02110958_12120.jpg images_split/train_10_percent/chihuahua Copying: images_split/train/chihuahua/n02085620_2706.jpg to images_split/train_10_percent/chihuahua/n02085620_2706.jpg images_split/train_10_percent/japanese_spaniel Copying: images_split/train/japanese_spaniel/n02085782_4616.jpg to images_split/train_10_percent/japanese_spaniel/n02085782_4616.jpg images_split/train_10_percent/briard Copying: images_split/train/briard/n02105251_7772.jpg to images_split/train_10_percent/briard/n02105251_7772.jpg images_split/train_10_percent/keeshond Copying: images_split/train/keeshond/n02112350_7157.jpg to images_split/train_10_percent/keeshond/n02112350_7157.jpg images_split/train_10_percent/african_hunting_dog Copying: images_split/train/african_hunting_dog/n02116738_6790.jpg to images_split/train_10_percent/african_hunting_dog/n02116738_6790.jpg images_split/train_10_percent/bull_mastiff Copying: images_split/train/bull_mastiff/n02108422_3277.jpg to images_split/train_10_percent/bull_mastiff/n02108422_3277.jpg images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_7997.jpg to images_split/train_10_percent/toy_poodle/n02113624_7997.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_2280.jpg to images_split/train_10_percent/redbone/n02090379_2280.jpg images_split/train_10_percent/airedale Copying: images_split/train/airedale/n02096051_6873.jpg to images_split/train_10_percent/airedale/n02096051_6873.jpg images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_13407.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_13407.jpg images_split/train_10_percent/chesapeake_bay_retriever Copying: images_split/train/chesapeake_bay_retriever/n02099849_43.jpg to images_split/train_10_percent/chesapeake_bay_retriever/n02099849_43.jpg images_split/train_10_percent/rottweiler Copying: images_split/train/rottweiler/n02106550_11444.jpg to images_split/train_10_percent/rottweiler/n02106550_11444.jpg images_split/train_10_percent/entlebucher Copying: images_split/train/entlebucher/n02108000_841.jpg to images_split/train_10_percent/entlebucher/n02108000_841.jpg images_split/train_10_percent/standard_schnauzer Copying: images_split/train/standard_schnauzer/n02097209_169.jpg to images_split/train_10_percent/standard_schnauzer/n02097209_169.jpg images_split/train_10_percent/australian_terrier Copying: images_split/train/australian_terrier/n02096294_3800.jpg to images_split/train_10_percent/australian_terrier/n02096294_3800.jpg images_split/train_10_percent/samoyed Copying: images_split/train/samoyed/n02111889_13281.jpg to images_split/train_10_percent/samoyed/n02111889_13281.jpg images_split/train_10_percent/wire_haired_fox_terrier Copying: images_split/train/wire_haired_fox_terrier/n02095314_2196.jpg to images_split/train_10_percent/wire_haired_fox_terrier/n02095314_2196.jpg images_split/train_10_percent/affenpinscher Copying: images_split/train/affenpinscher/n02110627_13211.jpg to images_split/train_10_percent/affenpinscher/n02110627_13211.jpg images_split/train_10_percent/airedale Copying: images_split/train/airedale/n02096051_7847.jpg to images_split/train_10_percent/airedale/n02096051_7847.jpg images_split/train_10_percent/norfolk_terrier Copying: images_split/train/norfolk_terrier/n02094114_315.jpg to images_split/train_10_percent/norfolk_terrier/n02094114_315.jpg images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_1606.jpg to images_split/train_10_percent/toy_poodle/n02113624_1606.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_4131.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_4131.jpg images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_2246.jpg to images_split/train_10_percent/kuvasz/n02104029_2246.jpg images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_1142.jpg to images_split/train_10_percent/shih_tzu/n02086240_1142.jpg images_split/train_10_percent/kuvasz Copying: images_split/train/kuvasz/n02104029_133.jpg to images_split/train_10_percent/kuvasz/n02104029_133.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_11573.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_11573.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_2481.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_2481.jpg images_split/train_10_percent/japanese_spaniel Copying: images_split/train/japanese_spaniel/n02085782_3649.jpg to images_split/train_10_percent/japanese_spaniel/n02085782_3649.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_6408.jpg to images_split/train_10_percent/borzoi/n02090622_6408.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_3937.jpg to images_split/train_10_percent/basenji/n02110806_3937.jpg images_split/train_10_percent/american_staffordshire_terrier Copying: images_split/train/american_staffordshire_terrier/n02093428_19443.jpg to images_split/train_10_percent/american_staffordshire_terrier/n02093428_19443.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_2056.jpg to images_split/train_10_percent/boxer/n02108089_2056.jpg images_split/train_10_percent/golden_retriever Copying: images_split/train/golden_retriever/n02099601_14.jpg to images_split/train_10_percent/golden_retriever/n02099601_14.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_7799.jpg to images_split/train_10_percent/borzoi/n02090622_7799.jpg images_split/train_10_percent/black_and_tan_coonhound Copying: images_split/train/black_and_tan_coonhound/n02089078_324.jpg to images_split/train_10_percent/black_and_tan_coonhound/n02089078_324.jpg images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_5756.jpg to images_split/train_10_percent/toy_terrier/n02087046_5756.jpg images_split/train_10_percent/tibetan_terrier Copying: images_split/train/tibetan_terrier/n02097474_2763.jpg to images_split/train_10_percent/tibetan_terrier/n02097474_2763.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_1401.jpg to images_split/train_10_percent/redbone/n02090379_1401.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_5573.jpg to images_split/train_10_percent/great_dane/n02109047_5573.jpg images_split/train_10_percent/eskimo_dog Copying: images_split/train/eskimo_dog/n02109961_16953.jpg to images_split/train_10_percent/eskimo_dog/n02109961_16953.jpg images_split/train_10_percent/maltese_dog Copying: images_split/train/maltese_dog/n02085936_2905.jpg to images_split/train_10_percent/maltese_dog/n02085936_2905.jpg images_split/train_10_percent/border_terrier Copying: images_split/train/border_terrier/n02093754_4697.jpg to images_split/train_10_percent/border_terrier/n02093754_4697.jpg images_split/train_10_percent/eskimo_dog Copying: images_split/train/eskimo_dog/n02109961_5924.jpg to images_split/train_10_percent/eskimo_dog/n02109961_5924.jpg images_split/train_10_percent/gordon_setter Copying: images_split/train/gordon_setter/n02101006_1208.jpg to images_split/train_10_percent/gordon_setter/n02101006_1208.jpg images_split/train_10_percent/chow Copying: images_split/train/chow/n02112137_2411.jpg to images_split/train_10_percent/chow/n02112137_2411.jpg images_split/train_10_percent/gordon_setter Copying: images_split/train/gordon_setter/n02101006_922.jpg to images_split/train_10_percent/gordon_setter/n02101006_922.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_5975.jpg to images_split/train_10_percent/italian_greyhound/n02091032_5975.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_1390.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_1390.jpg images_split/train_10_percent/tibetan_terrier Copying: images_split/train/tibetan_terrier/n02097474_3914.jpg to images_split/train_10_percent/tibetan_terrier/n02097474_3914.jpg images_split/train_10_percent/dingo Copying: images_split/train/dingo/n02115641_8463.jpg to images_split/train_10_percent/dingo/n02115641_8463.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_12846.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_12846.jpg images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_7142.jpg to images_split/train_10_percent/shih_tzu/n02086240_7142.jpg images_split/train_10_percent/australian_terrier Copying: images_split/train/australian_terrier/n02096294_8067.jpg to images_split/train_10_percent/australian_terrier/n02096294_8067.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_758.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_758.jpg images_split/train_10_percent/english_springer Copying: images_split/train/english_springer/n02102040_350.jpg to images_split/train_10_percent/english_springer/n02102040_350.jpg images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_1443.jpg to images_split/train_10_percent/komondor/n02105505_1443.jpg images_split/train_10_percent/miniature_schnauzer Copying: images_split/train/miniature_schnauzer/n02097047_1553.jpg to images_split/train_10_percent/miniature_schnauzer/n02097047_1553.jpg images_split/train_10_percent/shetland_sheepdog Copying: images_split/train/shetland_sheepdog/n02105855_7410.jpg to images_split/train_10_percent/shetland_sheepdog/n02105855_7410.jpg images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_1535.jpg to images_split/train_10_percent/mexican_hairless/n02113978_1535.jpg images_split/train_10_percent/pug Copying: images_split/train/pug/n02110958_15449.jpg to images_split/train_10_percent/pug/n02110958_15449.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_9250.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_9250.jpg images_split/train_10_percent/pembroke Copying: images_split/train/pembroke/n02113023_4052.jpg to images_split/train_10_percent/pembroke/n02113023_4052.jpg images_split/train_10_percent/norfolk_terrier Copying: images_split/train/norfolk_terrier/n02094114_3177.jpg to images_split/train_10_percent/norfolk_terrier/n02094114_3177.jpg images_split/train_10_percent/vizsla Copying: images_split/train/vizsla/n02100583_1969.jpg to images_split/train_10_percent/vizsla/n02100583_1969.jpg images_split/train_10_percent/wire_haired_fox_terrier Copying: images_split/train/wire_haired_fox_terrier/n02095314_2308.jpg to images_split/train_10_percent/wire_haired_fox_terrier/n02095314_2308.jpg images_split/train_10_percent/affenpinscher Copying: images_split/train/affenpinscher/n02110627_13782.jpg to images_split/train_10_percent/affenpinscher/n02110627_13782.jpg images_split/train_10_percent/eskimo_dog Copying: images_split/train/eskimo_dog/n02109961_10774.jpg to images_split/train_10_percent/eskimo_dog/n02109961_10774.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_856.jpg to images_split/train_10_percent/leonberg/n02111129_856.jpg images_split/train_10_percent/miniature_pinscher Copying: images_split/train/miniature_pinscher/n02107312_67.jpg to images_split/train_10_percent/miniature_pinscher/n02107312_67.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_32692.jpg to images_split/train_10_percent/great_dane/n02109047_32692.jpg images_split/train_10_percent/tibetan_terrier Copying: images_split/train/tibetan_terrier/n02097474_889.jpg to images_split/train_10_percent/tibetan_terrier/n02097474_889.jpg images_split/train_10_percent/kerry_blue_terrier Copying: images_split/train/kerry_blue_terrier/n02093859_184.jpg to images_split/train_10_percent/kerry_blue_terrier/n02093859_184.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_1799.jpg to images_split/train_10_percent/english_foxhound/n02089973_1799.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_1328.jpg to images_split/train_10_percent/standard_poodle/n02113799_1328.jpg images_split/train_10_percent/pekinese Copying: images_split/train/pekinese/n02086079_14929.jpg to images_split/train_10_percent/pekinese/n02086079_14929.jpg images_split/train_10_percent/cairn Copying: images_split/train/cairn/n02096177_5117.jpg to images_split/train_10_percent/cairn/n02096177_5117.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_15172.jpg to images_split/train_10_percent/collie/n02106030_15172.jpg images_split/train_10_percent/english_setter Copying: images_split/train/english_setter/n02100735_6469.jpg to images_split/train_10_percent/english_setter/n02100735_6469.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_2781.jpg to images_split/train_10_percent/leonberg/n02111129_2781.jpg images_split/train_10_percent/japanese_spaniel Copying: images_split/train/japanese_spaniel/n02085782_4590.jpg to images_split/train_10_percent/japanese_spaniel/n02085782_4590.jpg images_split/train_10_percent/redbone Copying: images_split/train/redbone/n02090379_1515.jpg to images_split/train_10_percent/redbone/n02090379_1515.jpg images_split/train_10_percent/samoyed Copying: images_split/train/samoyed/n02111889_4368.jpg to images_split/train_10_percent/samoyed/n02111889_4368.jpg images_split/train_10_percent/kelpie Copying: images_split/train/kelpie/n02105412_5135.jpg to images_split/train_10_percent/kelpie/n02105412_5135.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_5369.jpg to images_split/train_10_percent/newfoundland/n02111277_5369.jpg images_split/train_10_percent/ibizan_hound Copying: images_split/train/ibizan_hound/n02091244_589.jpg to images_split/train_10_percent/ibizan_hound/n02091244_589.jpg images_split/train_10_percent/appenzeller Copying: images_split/train/appenzeller/n02107908_5662.jpg to images_split/train_10_percent/appenzeller/n02107908_5662.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_818.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_818.jpg images_split/train_10_percent/australian_terrier Copying: images_split/train/australian_terrier/n02096294_1536.jpg to images_split/train_10_percent/australian_terrier/n02096294_1536.jpg images_split/train_10_percent/soft_coated_wheaten_terrier Copying: images_split/train/soft_coated_wheaten_terrier/n02098105_2744.jpg to images_split/train_10_percent/soft_coated_wheaten_terrier/n02098105_2744.jpg images_split/train_10_percent/appenzeller Copying: images_split/train/appenzeller/n02107908_3531.jpg to images_split/train_10_percent/appenzeller/n02107908_3531.jpg images_split/train_10_percent/pekinese Copying: images_split/train/pekinese/n02086079_14307.jpg to images_split/train_10_percent/pekinese/n02086079_14307.jpg images_split/train_10_percent/welsh_springer_spaniel Copying: images_split/train/welsh_springer_spaniel/n02102177_1055.jpg to images_split/train_10_percent/welsh_springer_spaniel/n02102177_1055.jpg images_split/train_10_percent/american_staffordshire_terrier Copying: images_split/train/american_staffordshire_terrier/n02093428_10908.jpg to images_split/train_10_percent/american_staffordshire_terrier/n02093428_10908.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_18548.jpg to images_split/train_10_percent/lhasa/n02098413_18548.jpg images_split/train_10_percent/chesapeake_bay_retriever Copying: images_split/train/chesapeake_bay_retriever/n02099849_562.jpg to images_split/train_10_percent/chesapeake_bay_retriever/n02099849_562.jpg images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_1088.jpg to images_split/train_10_percent/mexican_hairless/n02113978_1088.jpg images_split/train_10_percent/entlebucher Copying: images_split/train/entlebucher/n02108000_918.jpg to images_split/train_10_percent/entlebucher/n02108000_918.jpg images_split/train_10_percent/cardigan Copying: images_split/train/cardigan/n02113186_3049.jpg to images_split/train_10_percent/cardigan/n02113186_3049.jpg images_split/train_10_percent/irish_wolfhound Copying: images_split/train/irish_wolfhound/n02090721_1002.jpg to images_split/train_10_percent/irish_wolfhound/n02090721_1002.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_4001.jpg to images_split/train_10_percent/leonberg/n02111129_4001.jpg images_split/train_10_percent/clumber Copying: images_split/train/clumber/n02101556_2918.jpg to images_split/train_10_percent/clumber/n02101556_2918.jpg images_split/train_10_percent/ibizan_hound Copying: images_split/train/ibizan_hound/n02091244_430.jpg to images_split/train_10_percent/ibizan_hound/n02091244_430.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_7163.jpg to images_split/train_10_percent/lhasa/n02098413_7163.jpg images_split/train_10_percent/groenendael Copying: images_split/train/groenendael/n02105056_4770.jpg to images_split/train_10_percent/groenendael/n02105056_4770.jpg images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_6166.jpg to images_split/train_10_percent/toy_terrier/n02087046_6166.jpg images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_1219.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_1219.jpg images_split/train_10_percent/dandie_dinmont Copying: images_split/train/dandie_dinmont/n02096437_708.jpg to images_split/train_10_percent/dandie_dinmont/n02096437_708.jpg images_split/train_10_percent/lakeland_terrier Copying: images_split/train/lakeland_terrier/n02095570_889.jpg to images_split/train_10_percent/lakeland_terrier/n02095570_889.jpg images_split/train_10_percent/bedlington_terrier Copying: images_split/train/bedlington_terrier/n02093647_3215.jpg to images_split/train_10_percent/bedlington_terrier/n02093647_3215.jpg images_split/train_10_percent/papillon Copying: images_split/train/papillon/n02086910_2579.jpg to images_split/train_10_percent/papillon/n02086910_2579.jpg images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_2375.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_2375.jpg images_split/train_10_percent/boston_bull Copying: images_split/train/boston_bull/n02096585_342.jpg to images_split/train_10_percent/boston_bull/n02096585_342.jpg images_split/train_10_percent/dhole Copying: images_split/train/dhole/n02115913_4188.jpg to images_split/train_10_percent/dhole/n02115913_4188.jpg images_split/train_10_percent/cairn Copying: images_split/train/cairn/n02096177_1344.jpg to images_split/train_10_percent/cairn/n02096177_1344.jpg images_split/train_10_percent/eskimo_dog Copying: images_split/train/eskimo_dog/n02109961_1076.jpg to images_split/train_10_percent/eskimo_dog/n02109961_1076.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_6158.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_6158.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_6704.jpg to images_split/train_10_percent/standard_poodle/n02113799_6704.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_1353.jpg to images_split/train_10_percent/boxer/n02108089_1353.jpg images_split/train_10_percent/irish_terrier Copying: images_split/train/irish_terrier/n02093991_278.jpg to images_split/train_10_percent/irish_terrier/n02093991_278.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_10688.jpg to images_split/train_10_percent/italian_greyhound/n02091032_10688.jpg images_split/train_10_percent/ibizan_hound Copying: images_split/train/ibizan_hound/n02091244_2782.jpg to images_split/train_10_percent/ibizan_hound/n02091244_2782.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_11396.jpg to images_split/train_10_percent/siberian_husky/n02110185_11396.jpg images_split/train_10_percent/kelpie Copying: images_split/train/kelpie/n02105412_3979.jpg to images_split/train_10_percent/kelpie/n02105412_3979.jpg images_split/train_10_percent/dandie_dinmont Copying: images_split/train/dandie_dinmont/n02096437_3969.jpg to images_split/train_10_percent/dandie_dinmont/n02096437_3969.jpg images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_2322.jpg to images_split/train_10_percent/komondor/n02105505_2322.jpg images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_4315.jpg to images_split/train_10_percent/toy_terrier/n02087046_4315.jpg images_split/train_10_percent/french_bulldog Copying: images_split/train/french_bulldog/n02108915_5306.jpg to images_split/train_10_percent/french_bulldog/n02108915_5306.jpg images_split/train_10_percent/black_and_tan_coonhound Copying: images_split/train/black_and_tan_coonhound/n02089078_1245.jpg to images_split/train_10_percent/black_and_tan_coonhound/n02089078_1245.jpg images_split/train_10_percent/giant_schnauzer Copying: images_split/train/giant_schnauzer/n02097130_3396.jpg to images_split/train_10_percent/giant_schnauzer/n02097130_3396.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_16029.jpg to images_split/train_10_percent/collie/n02106030_16029.jpg images_split/train_10_percent/pomeranian Copying: images_split/train/pomeranian/n02112018_7953.jpg to images_split/train_10_percent/pomeranian/n02112018_7953.jpg images_split/train_10_percent/boston_bull Copying: images_split/train/boston_bull/n02096585_11808.jpg to images_split/train_10_percent/boston_bull/n02096585_11808.jpg images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_3776.jpg to images_split/train_10_percent/labrador_retriever/n02099712_3776.jpg images_split/train_10_percent/curly_coated_retriever Copying: images_split/train/curly_coated_retriever/n02099429_3024.jpg to images_split/train_10_percent/curly_coated_retriever/n02099429_3024.jpg images_split/train_10_percent/french_bulldog Copying: images_split/train/french_bulldog/n02108915_759.jpg to images_split/train_10_percent/french_bulldog/n02108915_759.jpg images_split/train_10_percent/german_shepherd Copying: images_split/train/german_shepherd/n02106662_19720.jpg to images_split/train_10_percent/german_shepherd/n02106662_19720.jpg images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_6116.jpg to images_split/train_10_percent/shih_tzu/n02086240_6116.jpg images_split/train_10_percent/cairn Copying: images_split/train/cairn/n02096177_1207.jpg to images_split/train_10_percent/cairn/n02096177_1207.jpg images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_2710.jpg to images_split/train_10_percent/shih_tzu/n02086240_2710.jpg images_split/train_10_percent/entlebucher Copying: images_split/train/entlebucher/n02108000_2962.jpg to images_split/train_10_percent/entlebucher/n02108000_2962.jpg images_split/train_10_percent/labrador_retriever Copying: images_split/train/labrador_retriever/n02099712_7815.jpg to images_split/train_10_percent/labrador_retriever/n02099712_7815.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_11769.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_11769.jpg images_split/train_10_percent/miniature_schnauzer Copying: images_split/train/miniature_schnauzer/n02097047_271.jpg to images_split/train_10_percent/miniature_schnauzer/n02097047_271.jpg images_split/train_10_percent/bluetick Copying: images_split/train/bluetick/n02088632_4210.jpg to images_split/train_10_percent/bluetick/n02088632_4210.jpg images_split/train_10_percent/eskimo_dog Copying: images_split/train/eskimo_dog/n02109961_3810.jpg to images_split/train_10_percent/eskimo_dog/n02109961_3810.jpg images_split/train_10_percent/leonberg Copying: images_split/train/leonberg/n02111129_2617.jpg to images_split/train_10_percent/leonberg/n02111129_2617.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_4185.jpg to images_split/train_10_percent/english_foxhound/n02089973_4185.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_2073.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_2073.jpg images_split/train_10_percent/keeshond Copying: images_split/train/keeshond/n02112350_2709.jpg to images_split/train_10_percent/keeshond/n02112350_2709.jpg images_split/train_10_percent/newfoundland Copying: images_split/train/newfoundland/n02111277_5964.jpg to images_split/train_10_percent/newfoundland/n02111277_5964.jpg images_split/train_10_percent/beagle Copying: images_split/train/beagle/n02088364_5716.jpg to images_split/train_10_percent/beagle/n02088364_5716.jpg images_split/train_10_percent/toy_poodle Copying: images_split/train/toy_poodle/n02113624_3796.jpg to images_split/train_10_percent/toy_poodle/n02113624_3796.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_4122.jpg to images_split/train_10_percent/basenji/n02110806_4122.jpg images_split/train_10_percent/malamute Copying: images_split/train/malamute/n02110063_15110.jpg to images_split/train_10_percent/malamute/n02110063_15110.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_693.jpg to images_split/train_10_percent/borzoi/n02090622_693.jpg images_split/train_10_percent/wire_haired_fox_terrier Copying: images_split/train/wire_haired_fox_terrier/n02095314_956.jpg to images_split/train_10_percent/wire_haired_fox_terrier/n02095314_956.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_5301.jpg to images_split/train_10_percent/boxer/n02108089_5301.jpg images_split/train_10_percent/saint_bernard Copying: images_split/train/saint_bernard/n02109525_11444.jpg to images_split/train_10_percent/saint_bernard/n02109525_11444.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_125.jpg to images_split/train_10_percent/boxer/n02108089_125.jpg images_split/train_10_percent/toy_terrier Copying: images_split/train/toy_terrier/n02087046_3211.jpg to images_split/train_10_percent/toy_terrier/n02087046_3211.jpg images_split/train_10_percent/blenheim_spaniel Copying: images_split/train/blenheim_spaniel/n02086646_421.jpg to images_split/train_10_percent/blenheim_spaniel/n02086646_421.jpg images_split/train_10_percent/komondor Copying: images_split/train/komondor/n02105505_3792.jpg to images_split/train_10_percent/komondor/n02105505_3792.jpg images_split/train_10_percent/pomeranian Copying: images_split/train/pomeranian/n02112018_2821.jpg to images_split/train_10_percent/pomeranian/n02112018_2821.jpg images_split/train_10_percent/keeshond Copying: images_split/train/keeshond/n02112350_9545.jpg to images_split/train_10_percent/keeshond/n02112350_9545.jpg images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_3743.jpg to images_split/train_10_percent/mexican_hairless/n02113978_3743.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_2688.jpg to images_split/train_10_percent/borzoi/n02090622_2688.jpg images_split/train_10_percent/cairn Copying: images_split/train/cairn/n02096177_4902.jpg to images_split/train_10_percent/cairn/n02096177_4902.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_595.jpg to images_split/train_10_percent/silky_terrier/n02097658_595.jpg images_split/train_10_percent/eskimo_dog Copying: images_split/train/eskimo_dog/n02109961_4369.jpg to images_split/train_10_percent/eskimo_dog/n02109961_4369.jpg images_split/train_10_percent/sussex_spaniel Copying: images_split/train/sussex_spaniel/n02102480_5706.jpg to images_split/train_10_percent/sussex_spaniel/n02102480_5706.jpg images_split/train_10_percent/gordon_setter Copying: images_split/train/gordon_setter/n02101006_2629.jpg to images_split/train_10_percent/gordon_setter/n02101006_2629.jpg images_split/train_10_percent/pekinese Copying: images_split/train/pekinese/n02086079_2893.jpg to images_split/train_10_percent/pekinese/n02086079_2893.jpg images_split/train_10_percent/bull_mastiff Copying: images_split/train/bull_mastiff/n02108422_2379.jpg to images_split/train_10_percent/bull_mastiff/n02108422_2379.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_3872.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_3872.jpg images_split/train_10_percent/lhasa Copying: images_split/train/lhasa/n02098413_1279.jpg to images_split/train_10_percent/lhasa/n02098413_1279.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_3981.jpg to images_split/train_10_percent/basenji/n02110806_3981.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_722.jpg to images_split/train_10_percent/italian_greyhound/n02091032_722.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_15702.jpg to images_split/train_10_percent/boxer/n02108089_15702.jpg images_split/train_10_percent/pembroke Copying: images_split/train/pembroke/n02113023_7316.jpg to images_split/train_10_percent/pembroke/n02113023_7316.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_14567.jpg to images_split/train_10_percent/whippet/n02091134_14567.jpg images_split/train_10_percent/norwich_terrier Copying: images_split/train/norwich_terrier/n02094258_530.jpg to images_split/train_10_percent/norwich_terrier/n02094258_530.jpg images_split/train_10_percent/flat_coated_retriever Copying: images_split/train/flat_coated_retriever/n02099267_1272.jpg to images_split/train_10_percent/flat_coated_retriever/n02099267_1272.jpg images_split/train_10_percent/sussex_spaniel Copying: images_split/train/sussex_spaniel/n02102480_5158.jpg to images_split/train_10_percent/sussex_spaniel/n02102480_5158.jpg images_split/train_10_percent/malinois Copying: images_split/train/malinois/n02105162_5600.jpg to images_split/train_10_percent/malinois/n02105162_5600.jpg images_split/train_10_percent/greater_swiss_mountain_dog Copying: images_split/train/greater_swiss_mountain_dog/n02107574_2436.jpg to images_split/train_10_percent/greater_swiss_mountain_dog/n02107574_2436.jpg images_split/train_10_percent/boston_bull Copying: images_split/train/boston_bull/n02096585_7542.jpg to images_split/train_10_percent/boston_bull/n02096585_7542.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_6065.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_6065.jpg images_split/train_10_percent/sussex_spaniel Copying: images_split/train/sussex_spaniel/n02102480_6047.jpg to images_split/train_10_percent/sussex_spaniel/n02102480_6047.jpg images_split/train_10_percent/cocker_spaniel Copying: images_split/train/cocker_spaniel/n02102318_9452.jpg to images_split/train_10_percent/cocker_spaniel/n02102318_9452.jpg images_split/train_10_percent/black_and_tan_coonhound Copying: images_split/train/black_and_tan_coonhound/n02089078_3893.jpg to images_split/train_10_percent/black_and_tan_coonhound/n02089078_3893.jpg images_split/train_10_percent/chow Copying: images_split/train/chow/n02112137_1830.jpg to images_split/train_10_percent/chow/n02112137_1830.jpg images_split/train_10_percent/otterhound Copying: images_split/train/otterhound/n02091635_2112.jpg to images_split/train_10_percent/otterhound/n02091635_2112.jpg images_split/train_10_percent/standard_schnauzer Copying: images_split/train/standard_schnauzer/n02097209_1092.jpg to images_split/train_10_percent/standard_schnauzer/n02097209_1092.jpg images_split/train_10_percent/australian_terrier Copying: images_split/train/australian_terrier/n02096294_1409.jpg to images_split/train_10_percent/australian_terrier/n02096294_1409.jpg images_split/train_10_percent/irish_wolfhound Copying: images_split/train/irish_wolfhound/n02090721_3302.jpg to images_split/train_10_percent/irish_wolfhound/n02090721_3302.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_3154.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_3154.jpg images_split/train_10_percent/english_setter Copying: images_split/train/english_setter/n02100735_10086.jpg to images_split/train_10_percent/english_setter/n02100735_10086.jpg images_split/train_10_percent/pug Copying: images_split/train/pug/n02110958_15217.jpg to images_split/train_10_percent/pug/n02110958_15217.jpg images_split/train_10_percent/rottweiler Copying: images_split/train/rottweiler/n02106550_4217.jpg to images_split/train_10_percent/rottweiler/n02106550_4217.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_18516.jpg to images_split/train_10_percent/collie/n02106030_18516.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_3582.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_3582.jpg images_split/train_10_percent/german_short_haired_pointer Copying: images_split/train/german_short_haired_pointer/n02100236_4181.jpg to images_split/train_10_percent/german_short_haired_pointer/n02100236_4181.jpg images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_4248.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_4248.jpg images_split/train_10_percent/boxer Copying: images_split/train/boxer/n02108089_1775.jpg to images_split/train_10_percent/boxer/n02108089_1775.jpg images_split/train_10_percent/miniature_schnauzer Copying: images_split/train/miniature_schnauzer/n02097047_674.jpg to images_split/train_10_percent/miniature_schnauzer/n02097047_674.jpg images_split/train_10_percent/brabancon_griffon Copying: images_split/train/brabancon_griffon/n02112706_1970.jpg to images_split/train_10_percent/brabancon_griffon/n02112706_1970.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_9613.jpg to images_split/train_10_percent/italian_greyhound/n02091032_9613.jpg images_split/train_10_percent/dandie_dinmont Copying: images_split/train/dandie_dinmont/n02096437_1793.jpg to images_split/train_10_percent/dandie_dinmont/n02096437_1793.jpg images_split/train_10_percent/curly_coated_retriever Copying: images_split/train/curly_coated_retriever/n02099429_1234.jpg to images_split/train_10_percent/curly_coated_retriever/n02099429_1234.jpg images_split/train_10_percent/english_foxhound Copying: images_split/train/english_foxhound/n02089973_3040.jpg to images_split/train_10_percent/english_foxhound/n02089973_3040.jpg images_split/train_10_percent/basenji Copying: images_split/train/basenji/n02110806_4966.jpg to images_split/train_10_percent/basenji/n02110806_4966.jpg images_split/train_10_percent/affenpinscher Copying: images_split/train/affenpinscher/n02110627_2748.jpg to images_split/train_10_percent/affenpinscher/n02110627_2748.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_11775.jpg to images_split/train_10_percent/whippet/n02091134_11775.jpg images_split/train_10_percent/dingo Copying: images_split/train/dingo/n02115641_8871.jpg to images_split/train_10_percent/dingo/n02115641_8871.jpg images_split/train_10_percent/boston_bull Copying: images_split/train/boston_bull/n02096585_3681.jpg to images_split/train_10_percent/boston_bull/n02096585_3681.jpg images_split/train_10_percent/bloodhound Copying: images_split/train/bloodhound/n02088466_7015.jpg to images_split/train_10_percent/bloodhound/n02088466_7015.jpg images_split/train_10_percent/dandie_dinmont Copying: images_split/train/dandie_dinmont/n02096437_1385.jpg to images_split/train_10_percent/dandie_dinmont/n02096437_1385.jpg images_split/train_10_percent/gordon_setter Copying: images_split/train/gordon_setter/n02101006_283.jpg to images_split/train_10_percent/gordon_setter/n02101006_283.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_39.jpg to images_split/train_10_percent/whippet/n02091134_39.jpg images_split/train_10_percent/schipperke Copying: images_split/train/schipperke/n02104365_3587.jpg to images_split/train_10_percent/schipperke/n02104365_3587.jpg images_split/train_10_percent/west_highland_white_terrier Copying: images_split/train/west_highland_white_terrier/n02098286_1255.jpg to images_split/train_10_percent/west_highland_white_terrier/n02098286_1255.jpg images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_1325.jpg to images_split/train_10_percent/mexican_hairless/n02113978_1325.jpg images_split/train_10_percent/pug Copying: images_split/train/pug/n02110958_1975.jpg to images_split/train_10_percent/pug/n02110958_1975.jpg images_split/train_10_percent/cairn Copying: images_split/train/cairn/n02096177_4768.jpg to images_split/train_10_percent/cairn/n02096177_4768.jpg images_split/train_10_percent/irish_terrier Copying: images_split/train/irish_terrier/n02093991_2126.jpg to images_split/train_10_percent/irish_terrier/n02093991_2126.jpg images_split/train_10_percent/border_collie Copying: images_split/train/border_collie/n02106166_1637.jpg to images_split/train_10_percent/border_collie/n02106166_1637.jpg images_split/train_10_percent/australian_terrier Copying: images_split/train/australian_terrier/n02096294_1299.jpg to images_split/train_10_percent/australian_terrier/n02096294_1299.jpg images_split/train_10_percent/yorkshire_terrier Copying: images_split/train/yorkshire_terrier/n02094433_2987.jpg to images_split/train_10_percent/yorkshire_terrier/n02094433_2987.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_9071.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_9071.jpg images_split/train_10_percent/entlebucher Copying: images_split/train/entlebucher/n02108000_1516.jpg to images_split/train_10_percent/entlebucher/n02108000_1516.jpg images_split/train_10_percent/scottish_deerhound Copying: images_split/train/scottish_deerhound/n02092002_6963.jpg to images_split/train_10_percent/scottish_deerhound/n02092002_6963.jpg images_split/train_10_percent/basset Copying: images_split/train/basset/n02088238_9778.jpg to images_split/train_10_percent/basset/n02088238_9778.jpg images_split/train_10_percent/italian_greyhound Copying: images_split/train/italian_greyhound/n02091032_4653.jpg to images_split/train_10_percent/italian_greyhound/n02091032_4653.jpg images_split/train_10_percent/saint_bernard Copying: images_split/train/saint_bernard/n02109525_2648.jpg to images_split/train_10_percent/saint_bernard/n02109525_2648.jpg images_split/train_10_percent/otterhound Copying: images_split/train/otterhound/n02091635_1302.jpg to images_split/train_10_percent/otterhound/n02091635_1302.jpg images_split/train_10_percent/pembroke Copying: images_split/train/pembroke/n02113023_6702.jpg to images_split/train_10_percent/pembroke/n02113023_6702.jpg images_split/train_10_percent/boston_bull Copying: images_split/train/boston_bull/n02096585_657.jpg to images_split/train_10_percent/boston_bull/n02096585_657.jpg images_split/train_10_percent/giant_schnauzer Copying: images_split/train/giant_schnauzer/n02097130_5175.jpg to images_split/train_10_percent/giant_schnauzer/n02097130_5175.jpg images_split/train_10_percent/borzoi Copying: images_split/train/borzoi/n02090622_7705.jpg to images_split/train_10_percent/borzoi/n02090622_7705.jpg images_split/train_10_percent/golden_retriever Copying: images_split/train/golden_retriever/n02099601_3569.jpg to images_split/train_10_percent/golden_retriever/n02099601_3569.jpg images_split/train_10_percent/great_dane Copying: images_split/train/great_dane/n02109047_32010.jpg to images_split/train_10_percent/great_dane/n02109047_32010.jpg images_split/train_10_percent/brittany_spaniel Copying: images_split/train/brittany_spaniel/n02101388_2064.jpg to images_split/train_10_percent/brittany_spaniel/n02101388_2064.jpg images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_6082.jpg to images_split/train_10_percent/shih_tzu/n02086240_6082.jpg images_split/train_10_percent/dhole Copying: images_split/train/dhole/n02115913_5392.jpg to images_split/train_10_percent/dhole/n02115913_5392.jpg images_split/train_10_percent/standard_poodle Copying: images_split/train/standard_poodle/n02113799_5372.jpg to images_split/train_10_percent/standard_poodle/n02113799_5372.jpg images_split/train_10_percent/mexican_hairless Copying: images_split/train/mexican_hairless/n02113978_3092.jpg to images_split/train_10_percent/mexican_hairless/n02113978_3092.jpg images_split/train_10_percent/japanese_spaniel Copying: images_split/train/japanese_spaniel/n02085782_2939.jpg to images_split/train_10_percent/japanese_spaniel/n02085782_2939.jpg images_split/train_10_percent/irish_water_spaniel Copying: images_split/train/irish_water_spaniel/n02102973_158.jpg to images_split/train_10_percent/irish_water_spaniel/n02102973_158.jpg images_split/train_10_percent/appenzeller Copying: images_split/train/appenzeller/n02107908_7567.jpg to images_split/train_10_percent/appenzeller/n02107908_7567.jpg images_split/train_10_percent/irish_setter Copying: images_split/train/irish_setter/n02100877_7519.jpg to images_split/train_10_percent/irish_setter/n02100877_7519.jpg images_split/train_10_percent/whippet Copying: images_split/train/whippet/n02091134_1131.jpg to images_split/train_10_percent/whippet/n02091134_1131.jpg images_split/train_10_percent/siberian_husky Copying: images_split/train/siberian_husky/n02110185_1469.jpg to images_split/train_10_percent/siberian_husky/n02110185_1469.jpg images_split/train_10_percent/shih_tzu Copying: images_split/train/shih_tzu/n02086240_4127.jpg to images_split/train_10_percent/shih_tzu/n02086240_4127.jpg images_split/train_10_percent/silky_terrier Copying: images_split/train/silky_terrier/n02097658_319.jpg to images_split/train_10_percent/silky_terrier/n02097658_319.jpg images_split/train_10_percent/staffordshire_bullterrier Copying: images_split/train/staffordshire_bullterrier/n02093256_11836.jpg to images_split/train_10_percent/staffordshire_bullterrier/n02093256_11836.jpg images_split/train_10_percent/collie Copying: images_split/train/collie/n02106030_7977.jpg to images_split/train_10_percent/collie/n02106030_7977.jpg images_split/train_10_percent/maltese_dog Copying: images_split/train/maltese_dog/n02085936_233.jpg to images_split/train_10_percent/maltese_dog/n02085936_233.jpg images_split/train_10_percent/airedale Copying: images_split/train/airedale/n02096051_5234.jpg to images_split/train_10_percent/airedale/n02096051_5234.jpg
# Count images in train_10_percent_dir
train_10_percent_image_class_counts = count_images_in_subdirs(train_10_percent_dir)
train_10_percent_image_class_counts_df = pd.DataFrame(train_10_percent_image_class_counts).sort_values("image_count", ascending=True)
train_10_percent_image_class_counts_df
| class_name | image_count | |
|---|---|---|
| 33 | doberman | 3 |
| 23 | pembroke | 4 |
| 61 | brabancon_griffon | 4 |
| 64 | old_english_sheepdog | 4 |
| 100 | scotch_terrier | 5 |
| ... | ... | ... |
| 40 | briard | 16 |
| 88 | collie | 16 |
| 11 | greater_swiss_mountain_dog | 17 |
| 43 | cocker_spaniel | 18 |
| 90 | boxer | 19 |
120 rows × 2 columns
# TK - turn the DataFrame above into a graph
plt.figure(figsize=(14, 7))
train_10_percent_image_class_counts_df.plot(kind="bar",
x="class_name",
y="image_count",
legend=False,
ax=plt.gca()) # plt.gca() = "get current axis", get the plt we setup above and put the data there
# Add customization
plt.title("Train 10 Percent Image Counts by Class")
plt.ylabel("Image Count")
plt.xticks(rotation=90, # Rotate the x labels for better visibility
fontsize=8) # Make the font size smaller for easier reading
plt.tight_layout() # Ensure things fit nicely
plt.show()
TK - Turn datasets into TensorFlow Dataset(s)¶
- See here: https://www.tensorflow.org/api_docs/python/tf/keras/utils/image_dataset_from_directory
- Also here: https://www.tensorflow.org/tutorials/load_data/images
Note: TK - If you're working with similar styles of data (e.g. all dog photos), it's best practice to shuffle training datasets to prevent the model from learning any order in the data, no need to shuffle testing datasets (this makes for easier evaluation).
import tensorflow as tf
img_size = 224
batch_size = 32
train_10_percent_ds = tf.keras.utils.image_dataset_from_directory(
directory=train_10_percent_dir,
batch_size=32,
image_size=(img_size, img_size),
shuffle=True,
seed=42
)
train_ds = tf.keras.utils.image_dataset_from_directory(
directory=train_dir,
batch_size=32,
image_size=(img_size, img_size),
shuffle=True,
seed=42
)
test_ds = tf.keras.utils.image_dataset_from_directory(
directory=test_dir,
batch_size=32,
image_size=(img_size, img_size),
shuffle=False,
seed=42
)
Found 1200 files belonging to 120 classes. Found 12000 files belonging to 120 classes. Found 8580 files belonging to 120 classes.
assert set(train_10_percent_ds.class_names) == set(train_ds.class_names) == set(test_ds.class_names)
class_names = train_ds.class_names
class_names[:5]
['affenpinscher', 'afghan_hound', 'african_hunting_dog', 'airedale', 'american_staffordshire_terrier']
import matplotlib.pyplot as plt
# TK - change this to a similar version of the above plotting function
plt.figure(figsize=(10, 10))
for images, labels in train_ds.take(1):
for i in range(9):
ax = plt.subplot(3, 3, i + 1)
plt.imshow(images[i].numpy().astype("uint8"))
plt.title(class_names[labels[i]])
plt.axis("off")
# TK - what does a single image look like?
image_batch, label_batch = next(iter(train_ds))
image_batch.shape, label_batch.shape
(TensorShape([32, 224, 224, 3]), TensorShape([32]))
image_batch[0], label_batch[0], class_names[label_batch[0]]
(<tf.Tensor: shape=(224, 224, 3), dtype=float32, numpy=
array([[[ 95.33705 , 149.33705 , 213.33705 ],
[ 95.33705 , 149.33705 , 213.33705 ],
[ 95.33705 , 149.33705 , 213.33705 ],
...,
[102.33705 , 154.33705 , 214.33705 ],
[102.33705 , 152.33705 , 213.33705 ],
[102.33705 , 152.33705 , 213.33705 ]],
[[ 96. , 150. , 214. ],
[ 96. , 150. , 214. ],
[ 96. , 150. , 214. ],
...,
[103. , 155. , 215. ],
[103. , 153. , 214. ],
[103. , 153. , 214. ]],
[[ 96.685265, 150.68527 , 214.68527 ],
[ 96.685265, 150.68527 , 214.68527 ],
[ 96.685265, 150.68527 , 214.68527 ],
...,
[103.685265, 155.68527 , 215.68527 ],
[103.685265, 153.68527 , 214.68527 ],
[103.685265, 153.68527 , 214.68527 ]],
...,
[[ 98.23341 , 113.76687 , 63.121964],
[148.32869 , 175.53044 , 116.02563 ],
[103.368706, 137.75781 , 75.07858 ],
...,
[100.0989 , 116.259605, 67.17925 ],
[102.490685, 123.42379 , 74.376015],
[ 95.4561 , 117.6978 , 68.57695 ]],
[[141.0309 , 154.13097 , 114.59556 ],
[113.637314, 139.43416 , 87.43759 ],
[ 89.02714 , 123.854385, 66.06294 ],
...,
[ 56.74781 , 74.727325, 24.896484],
[113.408585, 137.84 , 85.72163 ],
[ 97.09375 , 122.219025, 69.86849 ]],
[[ 55.66023 , 65.21129 , 39.81113 ],
[ 96.22576 , 121.01147 , 76.0117 ],
[ 48.16883 , 83.11556 , 28.655476],
...,
[ 74.006485, 92.11303 , 43.439846],
[ 80.433014, 107.080246, 53.912422],
[105.41931 , 134.51312 , 79.14029 ]]], dtype=float32)>,
<tf.Tensor: shape=(), dtype=int32, numpy=41>,
'english_springer')
TK - Configure the dataset for performance¶
AUTOTUNE = tf.data.AUTOTUNE
# Shuffle training datasets but don't need to shuffle test datasets (for easier evaluation)
train_10_percent_ds = train_10_percent_ds.cache().shuffle(100).prefetch(buffer_size=AUTOTUNE)
train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
test_ds = test_ds.cache().prefetch(buffer_size=AUTOTUNE)
TK - Create model¶
TK - Try transfer learning¶
- Only want to train the last layer of the model...
- See here: https://keras.io/guides/transfer_learning/
num_classes = len(class_names)
base_model = tf.keras.applications.efficientnet_v2.EfficientNetV2B0(
include_top=False,
weights="imagenet",
input_shape=(img_size, img_size, 3),
include_preprocessing=True
)
# base_model.summary()
# Freeze the base model
base_model.trainable = False
base_model.trainable
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/efficientnet_v2/efficientnetv2-b0_notop.h5 24274472/24274472 [==============================] - 1s 0us/step
False
# TK - functionize this model creation step
# Create new model
inputs = tf.keras.Input(shape=(224, 224, 3))
# TK - Create data augmentation
# x = data_augmentation(inputs)
# Craft model
x = base_model(inputs, training=False)
x = tf.keras.layers.GlobalAveragePooling2D()(x)
x = tf.keras.layers.Dropout(0.2)(x)
outputs = tf.keras.layers.Dense(units=num_classes,
activation="softmax", # TK - which activation function should you use?
name="output_layer")(x)
model_0 = tf.keras.Model(inputs, outputs, name="model_0")
model_0.summary()
Model: "model_0"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) [(None, 224, 224, 3)] 0
efficientnetv2-b0 (Functio (None, 7, 7, 1280) 5919312
nal)
global_average_pooling2d ( (None, 1280) 0
GlobalAveragePooling2D)
dropout (Dropout) (None, 1280) 0
output_layer (Dense) (None, 120) 153720
=================================================================
Total params: 6073032 (23.17 MB)
Trainable params: 153720 (600.47 KB)
Non-trainable params: 5919312 (22.58 MB)
_________________________________________________________________
# Functionize model creation
from typing import Tuple
def create_model(include_top: bool = False,
num_classes: int = 1000,
input_shape: Tuple[int, int, int] = (224, 224, 3),
include_preprocessing: bool = True,
trainable: bool = False,
dropout: float = 0.2,
model_name: str = "model") -> tf.keras.Model:
"""
Create an EfficientNetV2 B0 feature extractor model with a custom classifier layer.
Args:
include_top (bool, optional): Whether to include the top (classifier) layers of the model.
num_classes (int, optional): Number of output classes for the classifier layer.
input_shape (Tuple[int, int, int], optional): Input shape for the model's images (height, width, channels).
include_preprocessing (bool, optional): Whether to include preprocessing layers for image normalization.
trainable (bool, optional): Whether to make the base model trainable.
dropout (float, optional): Dropout rate for the global average pooling layer.
model_name (str, optional): Name for the created model.
Returns:
tf.keras.Model: A TensorFlow Keras model with the specified configuration.
"""
# Create base model
base_model = tf.keras.applications.efficientnet_v2.EfficientNetV2B0(
include_top=include_top,
weights="imagenet",
input_shape=input_shape,
include_preprocessing=include_preprocessing
)
# Freeze the base model (if necessary)
base_model.trainable = trainable
# Create input layer
inputs = tf.keras.Input(shape=input_shape, name="input_layer")
# Create model backbone
x = base_model(inputs, training=trainable)
x = tf.keras.layers.GlobalAveragePooling2D()(x)
x = tf.keras.layers.Dropout(0.2)(x)
# Create output layer (also known as "classifier" layer)
outputs = tf.keras.layers.Dense(units=num_classes,
activation="softmax",
name="output_layer")(x)
# Connect input and output layer
model = tf.keras.Model(inputs,
outputs,
name=model_name)
return model
model_0 = create_model(num_classes=len(class_names))
model_0.summary()
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_layer (InputLayer) [(None, 224, 224, 3)] 0
efficientnetv2-b0 (Functio (None, 7, 7, 1280) 5919312
nal)
global_average_pooling2d_1 (None, 1280) 0
(GlobalAveragePooling2D)
dropout_1 (Dropout) (None, 1280) 0
output_layer (Dense) (None, 120) 153720
=================================================================
Total params: 6073032 (23.17 MB)
Trainable params: 153720 (600.47 KB)
Non-trainable params: 5919312 (22.58 MB)
_________________________________________________________________
TK - Model 0 - Train a model on 10% of the training data¶
- TK - turn this into a table
- TK - add docs for compile + fit + evaluate + predict
A note on losses:
- If your labels are integers (e.g.
[[1], [23], [43], [16]...]), usetf.keras.losses.SparseCategoricalCrossentropy() - If your labels are one-hot encoded (e.g.
[0, 1, 0, 0, 1, 0...]), usetf.keras.losses.CategoricalCrossEntropy()
# Create model
model_0 = create_model(num_classes=len(class_names),
model_name="model_0")
# Compile model
model_0.compile(optimizer="adam", # or can use tf.keras.optimizers.Adam()
# Set from_logits=True if the last layer of your net is a Dense layer with no activation
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=["accuracy"],
steps_per_execution="auto")# new in TensorFlow 2.14.0
# Fit model
epochs=5
history_0 = model_0.fit(
train_10_percent_ds,
validation_data=test_ds,
epochs=epochs)
Epoch 1/5 38/38 [==============================] - 25s 259ms/step - loss: 4.1107 - accuracy: 0.2150 - val_loss: 3.2047 - val_accuracy: 0.5185 Epoch 2/5 38/38 [==============================] - 7s 184ms/step - loss: 2.3102 - accuracy: 0.7217 - val_loss: 2.0488 - val_accuracy: 0.6721 Epoch 3/5 38/38 [==============================] - 7s 184ms/step - loss: 1.2899 - accuracy: 0.8500 - val_loss: 1.4266 - val_accuracy: 0.7488 Epoch 4/5 38/38 [==============================] - 7s 181ms/step - loss: 0.7874 - accuracy: 0.9158 - val_loss: 1.1094 - val_accuracy: 0.7873 Epoch 5/5 38/38 [==============================] - 7s 180ms/step - loss: 0.5392 - accuracy: 0.9467 - val_loss: 0.9386 - val_accuracy: 0.8014
TK - Evaluate Model 0 on the test data¶
def plot_model_loss_curves(history):
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs_range = range(epochs)
plt.figure(figsize=(14, 7))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')
plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()
plot_model_loss_curves(history=history_0)
# Evaluate model_0, see: https://www.tensorflow.org/api_docs/python/tf/keras/Model#evaluate
model_0_results = model_0.evaluate(test_ds)
269/269 [==============================] - 6s 23ms/step - loss: 0.9386 - accuracy: 0.8014
TK - Model 1 - Train a model on 100% of the training data¶
Repeat the process for the above and compare the results
model_1 = create_model(num_classes=len(class_names),
model_name="model_1")
model_1.summary()
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_layer (InputLayer) [(None, 224, 224, 3)] 0
efficientnetv2-b0 (Functio (None, 7, 7, 1280) 5919312
nal)
global_average_pooling2d_3 (None, 1280) 0
(GlobalAveragePooling2D)
dropout_3 (Dropout) (None, 1280) 0
output_layer (Dense) (None, 120) 153720
=================================================================
Total params: 6073032 (23.17 MB)
Trainable params: 153720 (600.47 KB)
Non-trainable params: 5919312 (22.58 MB)
_________________________________________________________________
# Compile the model
model_1.compile(optimizer="adam",
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), # if no activation function at end of model, use "from_logits=True"
metrics=["accuracy"])
# Train the model
tf.keras.utils.set_random_seed(42)
history_1 = model_1.fit(train_ds,
epochs=epochs,
validation_data=test_ds)
Epoch 1/5 375/375 [==============================] - 27s 44ms/step - loss: 1.3750 - accuracy: 0.7448 - val_loss: 0.5082 - val_accuracy: 0.8716 Epoch 2/5 375/375 [==============================] - 15s 41ms/step - loss: 0.4004 - accuracy: 0.8932 - val_loss: 0.4060 - val_accuracy: 0.8809 Epoch 3/5 375/375 [==============================] - 15s 41ms/step - loss: 0.2884 - accuracy: 0.9206 - val_loss: 0.3812 - val_accuracy: 0.8817 Epoch 4/5 375/375 [==============================] - 15s 40ms/step - loss: 0.2308 - accuracy: 0.9369 - val_loss: 0.3724 - val_accuracy: 0.8841 Epoch 5/5 375/375 [==============================] - 15s 39ms/step - loss: 0.1896 - accuracy: 0.9482 - val_loss: 0.3617 - val_accuracy: 0.8829
TK - How many epochs should I fit for? ... generally with transfer learning you can get pretty good results quite quickly, however, you may want to look into training for longer, e.g. more epochs, fine-tuning the whole model and using callbacks such as Early Stopping to prevent the model from training for too long
TK - Evaluate Model 1 on the test data¶
plot_model_loss_curves(history=history_1)
# Evaluate model_1
model_1_results = model_1.evaluate(test_ds)
269/269 [==============================] - 6s 23ms/step - loss: 0.3617 - accuracy: 0.8829
TK - Make and evaluate predictions of the best model¶
# This will output logits (as long as softmax activation isn't in the model)
test_preds = model_1.predict(test_ds)
# Note: If not using activation="softmax" in last layer of model, may need to turn them into prediction probabilities (easier to understand)
# test_preds = tf.keras.activations.softmax(tf.constant(test_preds), axis=-1)
269/269 [==============================] - 7s 21ms/step
test_preds.shape
(8580, 120)
test_preds[0].shape, tf.argmax(test_preds[0])
((120,), <tf.Tensor: shape=(), dtype=int64, numpy=0>)
import numpy as np
test_ds_images = np.concatenate([images for images, labels in test_ds], axis=0)
test_ds_labels = np.concatenate([labels for images, labels in test_ds], axis=0)
test_ds_labels[0], test_ds_images[0]
(0,
array([[[ 43.804947, 44.804947, 38.804947],
[ 39.12483 , 40.12483 , 34.12483 ],
[ 82.701065, 83.701065, 77.62723 ],
...,
[ 21.578135, 25.578135, 24.578135],
[ 19.741274, 23.741274, 22.741274],
[ 15.660867, 19.660868, 18.660868]],
[[ 40.762886, 41.762886, 35.41467 ],
[ 38.87469 , 39.87469 , 33.526478],
[ 84.99161 , 85.99161 , 78.59259 ],
...,
[ 20.462063, 24.462063, 23.462063],
[ 19.207607, 23.207607, 22.207607],
[ 18.408989, 22.408989, 21.408989]],
[[ 37.69817 , 38.69817 , 30.698172],
[ 42.096752, 43.096752, 35.096752],
[ 93.62746 , 94.81206 , 86.258255],
...,
[ 19.530594, 23.530594, 22.530594],
[ 18.091536, 22.091536, 21.091536],
[ 19.202106, 23.202106, 22.202106]],
...,
[[106.28673 , 70.28673 , 96.28673 ],
[105.43164 , 69.43164 , 95.43164 ],
[106.95825 , 70.95825 , 96.95825 ],
...,
[140.48886 , 111.48886 , 129.48886 ],
[135.05005 , 106.05005 , 124.05005 ],
[141.57098 , 112.57099 , 130.57098 ]],
[[105.29309 , 69.29309 , 95.29309 ],
[108.00053 , 72.00053 , 98.00053 ],
[108.30019 , 72.30019 , 98.30019 ],
...,
[140.50948 , 111.50948 , 129.50948 ],
[137.474 , 108.474 , 126.474 ],
[142.99866 , 113.99865 , 131.99866 ]],
[[104.55957 , 68.55957 , 94.55957 ],
[108.76339 , 72.76339 , 98.76339 ],
[108.72768 , 72.72768 , 98.72768 ],
...,
[140.63617 , 111.63617 , 129.63617 ],
[138.14514 , 109.14514 , 127.14514 ],
[141.46515 , 112.46516 , 130.46515 ]]], dtype=float32))
# Choose a random 10 indexes from the test data and compare the values
import random
random_indexes = random.sample(range(len(test_ds_images)), 10)
# TK - this is why we don't shuffle the test data
fig, axes = plt.subplots(2, 5, figsize=(15, 7))
for i, ax in enumerate(axes.flatten()):
target_index = random_indexes[i]
# Get relevant target image, label, prediction and prediction probabilities
test_image = test_ds_images[target_index]
test_image_truth_label = class_names[test_ds_labels[target_index]]
test_image_pred_probs = test_preds[target_index]
test_image_pred_class = class_names[tf.argmax(test_image_pred_probs)]
# Plot the image
ax.imshow(test_image.astype("uint8"))
# Create sample title
title = f"""True: {test_image_truth_label}
Pred: {test_image_pred_class}
Prob: {np.max(test_image_pred_probs):.2f}"""
# Colour the title based on correctness of pred
ax.set_title(title,
color="green" if test_image_truth_label == test_image_pred_class else "red")
ax.axis("off")
TK - Accuracy per class¶
# TK - get accuracy values per class and show how they compare to the original results
# see: http://vision.stanford.edu/aditya86/ImageNetDogs/ -> http://vision.stanford.edu/aditya86/ImageNetDogs/bar_graph_full.png
# Want to compare test_preds + test_labels on a per class basis
# Can I convert both of these into a DataFrame and see what happens?
test_preds_labels = test_preds.argmax(axis=-1)
test_preds_labels
array([ 0, 0, 0, ..., 102, 119, 119])
test_ds_labels
array([ 0, 0, 0, ..., 119, 119, 119], dtype=int32)
test_results_df = pd.DataFrame({"test_pred_label": test_preds_labels,
"test_pred_prob": np.max(test_preds, axis=-1),
"test_pred_class_name": [class_names[test_pred_label] for test_pred_label in test_preds_labels],
"test_truth_label": test_ds_labels,
"test_truth_class_name": [class_names[test_truth_label] for test_truth_label in test_ds_labels]})
test_results_df["correct"] = (test_results_df["test_pred_class_name"] == test_results_df["test_truth_class_name"]).astype(int)
test_results_df
| test_pred_label | test_pred_prob | test_pred_class_name | test_truth_label | test_truth_class_name | correct | |
|---|---|---|---|---|---|---|
| 0 | 0 | 0.981926 | affenpinscher | 0 | affenpinscher | 1 |
| 1 | 0 | 0.747863 | affenpinscher | 0 | affenpinscher | 1 |
| 2 | 0 | 0.995609 | affenpinscher | 0 | affenpinscher | 1 |
| 3 | 44 | 0.467855 | flat_coated_retriever | 0 | affenpinscher | 0 |
| 4 | 0 | 0.997168 | affenpinscher | 0 | affenpinscher | 1 |
| ... | ... | ... | ... | ... | ... | ... |
| 8575 | 119 | 0.785783 | yorkshire_terrier | 119 | yorkshire_terrier | 1 |
| 8576 | 102 | 0.735301 | silky_terrier | 119 | yorkshire_terrier | 0 |
| 8577 | 102 | 0.828518 | silky_terrier | 119 | yorkshire_terrier | 0 |
| 8578 | 119 | 0.940582 | yorkshire_terrier | 119 | yorkshire_terrier | 1 |
| 8579 | 119 | 0.603093 | yorkshire_terrier | 119 | yorkshire_terrier | 1 |
8580 rows × 6 columns
# Calculate accuracy per class
accuracy_per_class = test_results_df.groupby("test_truth_class_name")["correct"].mean()
accuracy_per_class_df = pd.DataFrame(accuracy_per_class).reset_index().sort_values("correct", ascending=False)
accuracy_per_class_df
# pd.DataFrame(accuracy_per_class).sort_values("correct", ascending=False)
| test_truth_class_name | correct | |
|---|---|---|
| 62 | keeshond | 1.000000 |
| 10 | bedlington_terrier | 1.000000 |
| 30 | chow | 0.989583 |
| 92 | saint_bernard | 0.985714 |
| 2 | african_hunting_dog | 0.985507 |
| ... | ... | ... |
| 76 | miniature_poodle | 0.600000 |
| 5 | appenzeller | 0.588235 |
| 104 | staffordshire_bullterrier | 0.581818 |
| 16 | border_collie | 0.560000 |
| 43 | eskimo_dog | 0.440000 |
120 rows × 2 columns
# Let's create a horizontal bar chart to replicate a similar plot to the original Stanford Dogs page
plt.figure(figsize=(10, 17))
plt.barh(y=accuracy_per_class_df["test_truth_class_name"],
width=accuracy_per_class_df["correct"])
plt.xlabel("Accuracy")
plt.ylabel("Class Name")
plt.title("Dog Vision Accuracy per Class")
plt.ylim(-0.5, len(accuracy_per_class_df["test_truth_class_name"]) - 0.5) # Adjust y-axis limits to reduce white space
plt.gca().invert_yaxis() # This will display the first class at the top
plt.tight_layout()
plt.show()
TK - How does this compare to the original results?
TK - Finding the most wrong examples¶
# Get most wrong
top_100_most_wrong = test_results_df[test_results_df["correct"] == 0].sort_values("test_pred_prob", ascending=False)[:100]
top_100_most_wrong
| test_pred_label | test_pred_prob | test_pred_class_name | test_truth_label | test_truth_class_name | correct | |
|---|---|---|---|---|---|---|
| 2727 | 75 | 0.993720 | miniature_pinscher | 38 | doberman | 0 |
| 6884 | 54 | 0.993490 | groenendael | 95 | schipperke | 0 |
| 5480 | 44 | 0.990781 | flat_coated_retriever | 78 | newfoundland | 0 |
| 7630 | 4 | 0.988580 | american_staffordshire_terrier | 104 | staffordshire_bullterrier | 0 |
| 4155 | 55 | 0.986820 | ibizan_hound | 60 | italian_greyhound | 0 |
| ... | ... | ... | ... | ... | ... | ... |
| 2644 | 63 | 0.882950 | kelpie | 37 | dingo | 0 |
| 7934 | 73 | 0.882824 | maltese_dog | 109 | tibetan_terrier | 0 |
| 1059 | 14 | 0.881923 | bloodhound | 12 | black_and_tan_coonhound | 0 |
| 2047 | 86 | 0.879732 | pembroke | 27 | cardigan | 0 |
| 4601 | 15 | 0.878603 | bluetick | 67 | labrador_retriever | 0 |
100 rows × 6 columns
top_100_most_wrong.sample(n=10).index
7804
# Choose a random 10 indexes from the test data and compare the values
import random
random_most_wrong_indexes = top_100_most_wrong.sample(n=10).index
# TK - this is why we don't shuffle the test data
fig, axes = plt.subplots(2, 5, figsize=(15, 7))
for i, ax in enumerate(axes.flatten()):
target_index = random_most_wrong_indexes[i]
# Get relevant target image, label, prediction and prediction probabilities
test_image = test_ds_images[target_index]
test_image_truth_label = class_names[test_ds_labels[target_index]]
test_image_pred_probs = test_preds[target_index]
test_image_pred_class = class_names[tf.argmax(test_image_pred_probs)]
# Plot the image
ax.imshow(test_image.astype("uint8"))
# Create sample title
title = f"""True: {test_image_truth_label}
Pred: {test_image_pred_class}
Prob: {np.max(test_image_pred_probs):.2f}"""
# Colour the title based on correctness of pred
ax.set_title(title,
color="green" if test_image_truth_label == test_image_pred_class else "red",
fontsize=10)
ax.axis("off")
TK - Create a confusion matrix¶
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
fig, ax = plt.subplots(figsize=(25, 25))
confusion_matrix_dog_preds = confusion_matrix(y_true=test_ds_labels,
y_pred=test_preds_labels)
confusion_matrix_display = ConfusionMatrixDisplay(confusion_matrix=confusion_matrix_dog_preds,
display_labels=class_names)
# See: https://scikit-learn.org/stable/modules/generated/sklearn.metrics.ConfusionMatrixDisplay.html#sklearn.metrics.ConfusionMatrixDisplay.plot
ax.set_title("Dog Vision Confusion Matrix")
confusion_matrix_display.plot(xticks_rotation="vertical",
cmap="Blues",
colorbar=False,
ax=ax);
TK - Save and load the best model¶
See here: https://www.tensorflow.org/tutorials/keras/save_and_load#new_high-level_keras_format
TK Note: You may also see the "SavedModel" format as well as ".hdf5" formats...
# Save the model to .keras
model_1.save("dog_vision_model.keras")
# Load the model
loaded_model = tf.keras.models.load_model("dog_vision_model.keras")
# Evaluate the loaded model
loaded_model_results = loaded_model.evaluate(test_ds)
269/269 [==============================] - 10s 26ms/step - loss: 0.3711 - accuracy: 0.8787
assert model_1_results == loaded_model_results
TK - Make predictions on custom images with the best model¶
# TK - load custom image(s)
!wget -nc https://github.com/mrdbourke/zero-to-mastery-ml/raw/master/images/dog-photos.zip
!unzip dog-photos.zip
--2023-10-26 03:02:51-- https://github.com/mrdbourke/zero-to-mastery-ml/raw/master/images/dog-photos.zip Resolving github.com (github.com)... 140.82.121.4 Connecting to github.com (github.com)|140.82.121.4|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://raw.githubusercontent.com/mrdbourke/zero-to-mastery-ml/master/images/dog-photos.zip [following] --2023-10-26 03:02:51-- https://raw.githubusercontent.com/mrdbourke/zero-to-mastery-ml/master/images/dog-photos.zip Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1091355 (1.0M) [application/zip] Saving to: ‘dog-photos.zip’ dog-photos.zip 100%[===================>] 1.04M --.-KB/s in 0.02s 2023-10-26 03:02:52 (51.5 MB/s) - ‘dog-photos.zip’ saved [1091355/1091355] Archive: dog-photos.zip inflating: dog-photo-4.jpeg inflating: dog-photo-1.jpeg inflating: dog-photo-2.jpeg inflating: dog-photo-3.jpeg
# View images
custom_image_paths = ["dog-photo-1.jpeg",
"dog-photo-2.jpeg",
"dog-photo-3.jpeg",
"dog-photo-4.jpeg"]
fig, axes = plt.subplots(1, 4, figsize=(15, 7))
for i, ax in enumerate(axes.flatten()):
ax.imshow(plt.imread(custom_image_paths[i]))
ax.axis("off")
# def plot_10_random_images_from_path_list(path_list: list):
# fig, axes = plt.subplots(2, 5, figsize=(20, 10))
# samples = random.sample(path_list, 10)
# for i, ax in enumerate(axes.flatten()):
# sample_path = samples[i]
# sample_title = sample_path.parent.stem
# ax.imshow(plt.imread(sample_path))
# ax.set_title(sample_title)
# ax.axis("off")
# This will error...
loaded_model.predict("dog-photo-1.jpeg")
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-97-bf77d5e16d11> in <cell line: 2>() 1 # This will error... ----> 2 loaded_model.predict("dog-photo-1.jpeg") /usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py in error_handler(*args, **kwargs) 68 # To get the full stack trace, call: 69 # `tf.debugging.disable_traceback_filtering()` ---> 70 raise e.with_traceback(filtered_tb) from None 71 finally: 72 del filtered_tb /usr/local/lib/python3.10/dist-packages/tensorflow/python/framework/tensor_shape.py in __getitem__(self, key) 957 else: 958 if self._v2_behavior: --> 959 return self._dims[key] 960 else: 961 return self.dims[key] IndexError: tuple index out of range
# Model needs to make predictions on images in same format it was trained on
# Load the image (into PIL format)
custom_image = tf.keras.utils.load_img(
path="dog-photo-1.jpeg",
color_mode="rgb",
target_size=(img_size, img_size),
)
custom_image
# Turn the image into a tensor
custom_image_tensor = tf.keras.utils.img_to_array(custom_image)
custom_image_tensor.shape
(224, 224, 3)
loaded_model.predict(custom_image_tensor)
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-101-f7a0c54105c0> in <cell line: 1>() ----> 1 loaded_model.predict(custom_image_tensor) /usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py in error_handler(*args, **kwargs) 68 # To get the full stack trace, call: 69 # `tf.debugging.disable_traceback_filtering()` ---> 70 raise e.with_traceback(filtered_tb) from None 71 finally: 72 del filtered_tb /usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py in tf__predict_function(iterator) 13 try: 14 do_return = True ---> 15 retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope) 16 except: 17 do_return = False ValueError: in user code: File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 2416, in predict_function * return step_function(self, iterator) File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 2401, in step_function ** outputs = model.distribute_strategy.run(run_step, args=(data,)) File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 2389, in run_step ** outputs = model.predict_step(data) File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/training.py", line 2357, in predict_step return self(x, training=False) File "/usr/local/lib/python3.10/dist-packages/keras/src/utils/traceback_utils.py", line 70, in error_handler raise e.with_traceback(filtered_tb) from None File "/usr/local/lib/python3.10/dist-packages/keras/src/engine/input_spec.py", line 298, in assert_input_compatibility raise ValueError( ValueError: Input 0 of layer "model_1" is incompatible with the layer: expected shape=(None, 224, 224, 3), found shape=(32, 224, 3)
pred_probs = loaded_model.predict(tf.expand_dims(custom_image_tensor, axis=0))
# pred_probs = tf.keras.activations.softmax(tf.constant(pred_probs)) # if you have no activation="softmax" in your model
class_names[tf.argmax(pred_probs, axis=-1).numpy()[0]]
1/1 [==============================] - 2s 2s/step
'labrador_retriever'
tf.expand_dims(custom_image_tensor, axis=0).shape
TensorShape([1, 224, 224, 3])
Note: TK - In the case of some models you may need to rescale your values here, in our case the Rescaling layer is built-in to the model.
def pred_on_custom_image(image_path,
model,
target_size=img_size,
class_names=class_names,
plot=True):
# Prepare and load image
custom_image = tf.keras.utils.load_img(
path=image_path,
color_mode="rgb",
target_size=(target_size, target_size),
)
# Turn the image into a tensor
custom_image_tensor = tf.keras.utils.img_to_array(custom_image)
# Add a batch dimension to the target tensor (e.g. (224, 224, 3) -> (1, 224, 224, 3))
custom_image_tensor = tf.expand_dims(custom_image_tensor, axis=0)
# Make a prediction with the target model
pred_probs = model.predict(custom_image_tensor)
# pred_probs = tf.keras.activations.softmax(tf.constant(pred_probs))
pred_class = class_names[tf.argmax(pred_probs, axis=-1).numpy()[0]]
# Plot if we want
if not plot:
return pred_class
else:
plt.figure(figsize=(5, 3))
plt.imshow(plt.imread(image_path))
plt.title(pred_class)
plt.axis("off")
pred_on_custom_image(image_path="dog-photo-2.jpeg", model=loaded_model)
# Predict on multiple images
fig, axes = plt.subplots(1, 4, figsize=(15, 7))
for i, ax in enumerate(axes.flatten()):
image_path = custom_image_paths[i]
pred_class = pred_on_custom_image(image_path=image_path,
model=loaded_model,
plot=False)
ax.imshow(plt.imread(image_path))
ax.set_title(pred_class)
ax.axis("off")
TK - Extensions & Exercises¶
- Create a machine learning app with Gradio to predict on images of dogs - https://www.gradio.app/
- Try a prediction on your own images of dogs and see if the model is correct
- Train a model on your own custom set of image classes, for example, apple vs banana vs orange
- More callbacks -
- Data augmentation -
- Other models - see tf.keras.applications or Kaggle Models
- ZTM TensorFlow course -
- See further fine-tuning here
- See videos on my YouTube for a more comprehensive TensorFlow overview to get started
TK - Try data augmentation¶
See: https://www.tensorflow.org/tutorials/images/data_augmentation
from tensorflow.keras import layers
data_augmentation = tf.keras.Sequential(
[
layers.RandomFlip("horizontal"),
layers.RandomRotation(factor=0.2),
layers.RandomZoom(
height_factor=0.2, width_factor=0.2
),
],
name="data_augmentation"
)
base_model = tf.keras.applications.efficientnet_v2.EfficientNetV2B0(
include_top=False,
weights='imagenet',
input_shape=(img_size, img_size, 3),
include_preprocessing=True
)
# base_model.summary()
# Freeze the base model
base_model.trainable = False
# TK - functionize this
# Create new model
inputs = tf.keras.Input(shape=(224, 224, 3))
# TK - Create data augmentation
x = data_augmentation(inputs)
# Craft model
x = base_model(x, training=False)
x = tf.keras.layers.GlobalAveragePooling2D()(x)
x = tf.keras.layers.Dropout(0.2)(x)
outputs = tf.keras.layers.Dense(num_classes,
name="output_layer",
activation="softmax")(x) # Note: If you have "softmax" activation, use from_logits=False in loss function
model_2 = tf.keras.Model(inputs, outputs, name="model_2")
model_2.summary()